为什么取不到ashx里的session的值 ?

caiin 2010-03-29 09:55:46
查了资料之后。。。也实现了接口
using System.Web.SessionState; //第一步:导入此命名空间

public class checkCookie : IHttpHandler ,IRequiresSessionState //第二步:实现接口 到此就可以像平时一样用Session了

但是在aspx页面里还是取不到session的值,总提示:未将对象引用设置到对象的实例???
这是为什么呢??????
...全文
389 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
JL_net 2011-09-10
  • 打赏
  • 举报
回复
我也遇见这个问题,在ashx文件中飞session赋值,但是在aspx文件中去session的值时是空的。请高手指教。
jonathanpeng 2010-03-29
  • 打赏
  • 举报
回复
[WebMethod(EnableSession = true)]
这是asmx里的用法
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 caiin 的回复:]
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Session["CheckCode"].ToString());
}

这是加载时接收session值 。。
还有一个是 验证码:<img alt="看不清,换一张" style="width:60px;height:23px;cursor:po……
[/Quote]

滞后,呵呵,自己想吧。

Web总之是“客户端--服务器端”要跑一个来回才能记录下点东西的!所以你测试时,只能先在第一个来回中设置Session值,然后在第二个来回中才能去取!
caiin 2010-03-29
  • 打赏
  • 举报
回复
人呢,跑哪儿去了。。。
caiin 2010-03-29
  • 打赏
  • 举报
回复
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Session["CheckCode"].ToString());
}

这是加载时接收session值 。。
还有一个是 验证码:<img alt="看不清,换一张" style="width:60px;height:23px;cursor:pointer;" src="CheckCode.ashx?" onclick="this.src=this.src+'?'" />-------这个是在html里的。。。

就是这样接收的。。。。两个值是不一样的。。请问这样接收怎么会有滞后的问题?
  • 打赏
  • 举报
回复
[Quote=引用楼主 caiin 的回复:]
查了资料之后。。。也实现了接口
using System.Web.SessionState; //第一步:导入此命名空间

public class checkCookie : IHttpHandler ,IRequiresSessionState //第二步:实现接口 到此就可以像平时一样用Session了

但是在aspx页面里还是取不到session的值,总提示:未将对象引用设置到……
[/Quote]

不知道你怎样测试,怎样访问ashx?!

测试才是真正的硬碰硬的技术,实现一个东西只是次要的。你不能因为实现了书上说的一个接口,就非要看到session。
monom 2010-03-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lcl_data 的回复:]

这里为自己或后来困惑的朋友做一个提醒的记录,当想要在HttpHandler(ashx文件)中访问Session的状态值时,需要显式的实现一个接口 IReadOnlySessionState,示例如下:




<% @ webhandler language="C#" class="DownloadHandler" %>
using System;
using System.Web……
[/Quote]


IReadOnlySessionState
IRequiresSessionState
caiin 2010-03-29
  • 打赏
  • 举报
回复
实现了啊。。。
<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Web;
using System.Collections;
using System.Web.SessionState;
using System.Drawing;


//public class Handler : IHttpHandler, IRequiresSessionState
public class Handler : IHttpHandler,IReadOnlySessionState
{

  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lcl_data 的回复:]
这里为自己或后来困惑的朋友做一个提醒的记录,当想要在HttpHandler(ashx文件)中访问Session的状态值时,需要显式的实现一个接口 IReadOnlySessionState,示例如下:




<% @ webhandler language="C#" class="DownloadHandler" %>
using System;
using System.Web;……
[/Quote]

楼主已经实现 IRequiresSessionState 了。
caiin 2010-03-29
  • 打赏
  • 举报
回复
还有一个取值滞后的问题。。
就是ashx显示出来的值与session接收到的值不一样????
session取到的值总是ashx 的前一个显示的值 ?、??这又是为什么???
十八道胡同 2010-03-29
  • 打赏
  • 举报
回复
这里为自己或后来困惑的朋友做一个提醒的记录,当想要在HttpHandler(ashx文件)中访问Session的状态值时,需要显式的实现一个接口 IReadOnlySessionState,示例如下:




<% @ webhandler language="C#" class="DownloadHandler" %>
using System;
using System.Web;
using System.Web.SessionState ;

public class DownloadHandler : IHttpHandler, IReadOnlySessionState
{
public bool IsReusable { get { return true; } }
public void ProcessRequest(HttpContext ctx)
{
ctx.Response.Write(ctx.Session["fred"]);
}
}



如果要读写Session的值,那么只要实现 IRequiresSessionState 接口就可以了,这两个接口没有待实现的方法,可直接使用
caiin 2010-03-29
  • 打赏
  • 举报
回复
传值为空应该不可能吧。。。。
private string GenerateCheckCode()
{
int number;
char code;
string checkCode = String.Empty;

Random random = new Random();

for (int i = 0; i < 4; i++)
{
number = random.Next();

if (number % 2 == 0)
code = (char)('0' + (char)(number % 10));
else
code = (char)('A' + (char)(number % 26));


checkCode += code.ToString();
}

HttpContext.Current.Session["CheckCode"] = checkCode;
HttpCookie cookie = new HttpCookie("CheckCode", checkCode);
//this.Response.Cookies.Add(cookie);
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
return checkCode;

}
灵雨飘零 2010-03-29
  • 打赏
  • 举报
回复
session的值为空。或者你传值为空吧??



110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧