asp.net与asp的session共享 及 asp的请求拦截
asp.net 与 asp 的session是无法直接共享的(底层的处理dll也不一样),要想互通session,只能用变通的办法:
一、asp.net -> asp 的session传递
a) 建一个类似SessionHanler.asp的页面,代码如下:
<!-- #include virtual="inc/Func.asp" -->
<%
Dim returnUrl
Session("user") = Request("user")
Set returnUrl = Request("returnUrl")
if returnUrl="" then
returnUrl = "home.asp"
end if
'记日志
AppendFile "/log/log.txt" , Now() & ",user:"&Session("user") &",returnUrl:" & returnUrl
Response.Redirect(returnUrl)
%>
大概功能,就是接收参数,然后按需要生成Session,最后重定向到真正的功能页面,这样其它页面访问Session时就有值了
b) 建一个asp.net页面,把需要传递的值,以参数形式提交到 SessionHanler.asp (POST或GET方式都行),参考代码:
using System;
namespace ASP_ASPX_TEST
{
public partial class index : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
string returnUrl = "home.asp";
string sessoinHandlerUrl = "SessionHandler.asp";
string postData = "user=" + this.txtUser.Text + "&returnUrl=" + returnUrl;
Response.Redirect(sessoinHandlerUrl + "?" + postData);
}
}
}
}
二、asp -> asp.net 的session传递
反过来做即可,原理完全相同。
三、拦截asp请求
对于现有的asp项目,在不修改其asp源代码的前提下,如果需要对http请求加以拦截(例如:把拦截到的请求参数做些处理,再转发到其它子系统。同时不影响原来asp项目的正常运行),有二种做法:
a) 自行开发ISAPI 筛选器 ,然后在IIS里,把自己开发的dll加入ISAPI 筛选器
这个方法比较繁琐,技术难度也相对较高,在今天.net的时代,不推荐大家使用,有兴趣的可以参考一个开源项目: http://filterdotnet.codeplex.com/
以及 一些ISAPI的开发文章,比如
ISAPI开发介绍 http://blog.csdn.net/mycoolx/article/details/6913048
ISAPI tutorial for Delphi developers http://delphi.about.com/library/bluc/text/uc060901c.htm
delphi IIS ISAPI http://www.cnblogs.com/cisky/archive/2011/01/05/1926249.html
delphi IIS ISAPI http://siyebocai.blog.163.com/blog/static/103316426200810297512408/
用Delphi编写 IIS ISAPI 程序 http://download.csdn.net/detail/wwwvvingnet/2229146
在Delphi中用IIS或PWS调试ISAPI程序 http://bbs.csdn.net/topics/7979
b) 利用asp.net的HttpModule (环境:IIS7 /Asp.Net 4.0上 测试通过)
前提:Asp项目所用的应用程序池必须采用"集成"模式
先建一个HttpModule
using System;
using System.IO;
using System.Web;
namespace ASP_ASPX_TEST
{
public class MyHttpModule : IHttpModule
{
string logFileName;
public MyHttpModule()
{
logFileName = HttpContext.Current.Server.MapPath("~/log/request.log");
}
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.BeginRequest += BeginRequestHandle;
context.EndRequest += EndRequestHandle;
}
private void BeginRequestHandle(Object source, EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
HttpRequest request = context.Request;
File.AppendAllText(logFileName,Environment.NewLine + request.Url + Environment.NewLine + "BeginRequest => " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + Environment.NewLine);
foreach (var item in request.QueryString.AllKeys)
{
File.AppendAllText(logFileName, string.Format(" QueryString => {0}:{1}", item, request.QueryString[item]) + Environment.NewLine);
}
foreach (var item in request.Form.AllKeys)
{
File.AppendAllText(logFileName, string.Format(" Form => {0}:{1}", item, request.Form[item]) + Environment.NewLine);
}
context.Response.Write("BeginRequestHandle<br/>");
}
private void EndRequestHandle(Object source, EventArgs e)
{
HttpApplication application = (HttpApplication)source;
HttpContext context = application.Context;
HttpRequest request = context.Request;
File.AppendAllText(logFileName, Environment.NewLine + request.Url + Environment.NewLine + "EndRequest => " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + Environment.NewLine);
foreach (var item in request.QueryString.AllKeys)
{
File.AppendAllText(logFileName, string.Format(" QueryString => {0}:{1}", item, request.QueryString[item]) + Environment.NewLine);
}
foreach (var item in request.Form.AllKeys)
{
File.AppendAllText(logFileName, string.Format(" Form => {0}:{1}", item, request.Form[item]) + Environment.NewLine);
}
context.Response.Write("EndRequestHandle<br/>");
}
}
}
这里只是演示代码,我把所有请求的QueryString和Form参数都记录了下来。
web.config中修改配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="MyHttpModule" type="ASP_ASPX_TEST.MyHttpModule,ASP_ASPX_TEST" />
</modules>
</system.webServer>
</configuration>
注:IIS7及以上版本,自定义的HttpModule,必须加到 system.webServer节点下,否则只能拦截asp.net的请求,对asp无效
最后赠送一个asp调试的小技巧(自从asp.net出来以后,很多人估计象我一样,已经很久不碰asp,这些小技巧差不多忘记光了,贴在这里备份一下)
IE浏览器里先去掉 友好错误的勾选
IIS设置里,允许发送详细错误到客户端
这样,asp代码出错时,就会显示详细信息了
- 剑指OFFER之二维数组中的查找(九度OJ1384)
- 剑指OFFER之用两个栈实现队列(九度OJ1512)
- 剑指OFFER之用两个栈实现队列(九度OJ1512)
- 简单的客户机服务器投射模拟
- 使用gcc编译gdb调试
- 剑指OFFER之第一个只出现一次的字符(九度OJ1283)
- c++中类长度解析
- 剑指OFFER之丑数(九度OJ1214)
- 剑指OFFER之把数组排成最小的数(九度OJ1504)
- 剑指OFFER之从1到n中出现1的次数(九度OJ1373)
- 剑指OFFER之最大子向量和(连续子数组的最大和)(九度OJ1372)
- 剑指OFFER之最小的K个数(九度OJ1371)
- 剑指OFFER之数组中出现次数超过一半的数字(九度OJ1370)
- 如何成为一名10x的数据分析师?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- pytorch实现的transformer代码分析
- 终于搞懂HashMap的源码了!!!
- (21)Bash用户自定义变量
- python实现支持向量机之具体实现
- Spring boot 集成apollo达到配置的热加载
- ApplicationContext 和beanFactory 和 factoryBean的区别以及联系
- pytorch中的nn.Embedding
- redis的持久化存储AOF的原理
- (三十四)golang--接口
- 回溯法--八皇后问题
- (19)Bash多命令顺序执行与管道符
- (三十五)golang--面向对象之多态
- redis的持久化存储RDB的原理分析
- BIO到NIO的演变过程
- tensorflow版本的tansformer训练IWSLT数据集