首页新闻找找看学习计划

ASP.NET中,一般处理程序中SESSION获取值的问题

0
悬赏园豆:10 [已解决问题] 解决于 2017-10-29 16:28

我在ASP.NET项目中创建两个一般处理程序:

createcode.ashx(这个用于生成验证码,生成后的验证码保存到Session中):

context.Session["code"]="123456";

vaidlcode.ashx(这个用于用户注册,在这个页面中获取生成的验证码):

string code=context.Session["code"].toString();

//这个两个一般处理程序都按照网上提示,实现接口:IRequiresSessionState,在第一个ashx程序中,调试发现Session已经创建,但是,在第二个ashx程序中,始终无法获取到Session的值,报错提示为:未将对象引用设置到对象的实例!我怀疑,是两次通过AJAX调用的ASHX不在同一个线程中,所以导致SESSION无法获取到,请问是否确实是这个问题,如果不是这个问题,应该怎么解决?我这是这两个接口是使用Soapui工具测试的。

有机物的主页 有机物 | 初学一级 | 园豆:18
提问于:2017-10-16 13:59
< >
分享
最佳答案
0

bu不是.得要在头中看看有没sessionid

收获园豆:10
吴瑞祥 | 高人七级 |园豆:28675 | 2017-10-16 14:39

不好意思,我这边不是很清楚你说的意思,麻烦你这边能说明详细一点吗?

有机物 | 园豆:18 (初学一级) | 2017-10-16 14:42

@有机物: session是基于cookie的.

你用的测试工具.所以有可能是你的测试工具没有保存cookie.对系统来说你第一次和第二次请求是2个回话.

在第一次请求的时候你的请求头中是没有sessionid的.在响应头中会有一个setcookie头.浏览器会根据这个响应保存cookie.然后在下次的请求中带上这个cookie.服务器在第二次请求中.根据其中的sessionid获取session信息.

吴瑞祥 | 园豆:28675 (高人七级) | 2017-10-16 14:46

@吴瑞祥: 我在问题中提到的,这两个一般处理程序是在项目中作为数据提供的接口。我创建完成后,发布到IIS上。另外创建了一个WEB项目,在这个WEB项目中通过AJAX调用第一个程序获取验证码,再调第二个程序调用用户注册,这个时候再用户注册的接口中同样也会报错,提示上面的错误信息:未将对象引用设置到对象的实例!所以,我就被搞蒙了,如果将这两个一般处理程序放到这个WEB项目中,又是好好的。

有机物 | 园豆:18 (初学一级) | 2017-10-16 14:52

@有机物: 我上面不是已经给你解释了这种错误发生的原因了吗?

吴瑞祥 | 园豆:28675 (高人七级) | 2017-10-16 15:08

@吴瑞祥: 好的,我这边稍后抽时间测试一下。

有机物 | 园豆:18 (初学一级) | 2017-10-16 15:09
其他回答(2)
0

你需要明白Session的原理是什么,设置Session会有一个cookie即SessionId返回给客户端,而服务端就是通过该SessionId来获取Session的值的,所以如果你下一次请求没有带上cookie(SessionId),服务端当然获取不到信息。。

Kerwin1202 | 园豆:68 (初学一级) | 2017-10-17 16:28
0

在你的类 class 后面 继承IRequiresSessionState就可以获取到了。原理:在自定义 HTTP 处理程序中实现 IRequiresSessionState 接口,以确定处理程序是否需要对会话状态值具有读写访问权

深圳PowerBI | 园豆:204 (菜鸟二级) | 2017-12-14 18:25
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册