App code里面为何取不到session值呢 本帖最后由 bxqybxqy 于 2011-08-01 16:00:21 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 好像要求你的类继承 System.Web.UI.Page 才可以 Session["UserInfo"] = us;你应该放在Application或者Cahce对象里面,而不是Session。Session是针对当前会话的。Application.Lock();ArrayList a;if(Application["UserInfo"] == null){ a = new ArrayList(); a.Add(us);}else{a = Application["UserInfo"] as ArrayList;a.Add(us);} Application["UserInfo"] = a;Application.UnLock(); 在webconfig中加<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="240" stateNetworkTimeout="14400" />试试 可以先看下应用程序的生命周期,Application_Start开始事件中session好像还没有被创建吧! 不好意思看错了, 我还以为你写到Application_Start事件里了呢。应该是你没有几次page的愿意 取不到HttpContext.Current 当前上下文 你可以调试看看 这个对象应该是空的。 回复4#我是想用一个新线程去监视用户是不是在线了 不在线 我就清除application 我只是想实现单点登录的,可以如果用户不正常退出(直接关闭浏览器), application 里面的值清不了,所以用户想再次登录的时候他会提示已登录// 只因为放在session 里 (用户无论是正常退出,还是直接关闭浏览器)session 都会销毁, 这个新线程每10秒 检测一次session 如果session为空, 那我直接清空application 回复8#HttpContext.Current.Session["UserInfo"];是空的, 但我怎么在cs文件里继承page呢. 我怎么都调不到 一般情况下你是不能坚查Session的,Session只属于当前访问者,application 里面的值清不了?这是谁告诉你的?你不会在Session_OnEnd里面清除吗? 继承page也没有用,没有人访问,是没有Session可言的 多谢提醒我用Session_OnEnd试试,不过我想用另一个线程去清的话 我现在的问题有没有好的解决办法, [现大大概知道出错的原因了,是因为程序启动的时候还没有创建session呢, 但是话又说回来, 我是在用户登录之后去判断的 理应是已经有session才是] Session["UserInfo"] = us; Session["clearsice"] = true; Application["isLogin"] = txtUsername.Text.Trim(); MonitorUsers.User_flog(1);用户登录后才去调用: if (HttpContext.Current.Session["userInfo"] != null)//未创建对象的实例还望高手指点参考:http://topic.csdn.net/u/20091119/10/af6bc1a0-6955-4cfa-b9c5-6271c6d64f6c.html?seed=580189784&r=74720121#r_74720121 用户登录之后,也不是凡是HttpContext.Current.Session就有的。你必须从asp.net启动的对页面处理的线程进入,在当前线程上下文环境里才会有。 或者这么说吧,假设你现在有两个线程都在执行,一个是执行你的CheckUserIsOnline方法,另一个是执行你的UserLogin方法,后者是从aspx被asp.net调用之后执行的方法,那么只有后者可以访问HttpContext.Current.Session,而前者只能是null。 恩,有可能是你说的这样, 但我昨天找的有关文章说是 这两个session是同一个.那我怎么才能在另一个线程里检测出第一个线程中的Session 呢 谢谢 你说的那Session_End事件 当用户直接关闭浏览器时 是不会被触发的 只能是session过期时才可以被触[这样一来就有问题: 用户直接关闭浏览器,一会他又想登录系统(session还没过期) 系统就会提示,当前账号已登录!]MSDN说的关闭IE时不执行Session_End事件你能说下 不能使用另一个线程去清application 或检测当前session 的原因么 Session["UserInfo"] 好像取出来不是 UserInfo类型 还要转换吧 问题是现在还好像还没创建 session 再说 我那里已经做了非空判断了======================================================================有人用以下方法解决了 但是我的程序中 线程在调用MonitorUsers类时 他不先执行下面方法protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (System.Web.HttpContext.Current.Session["Islogin"] == null) { HttpContext.Current.Response.Write("session Is Null"); } else { HttpContext.Current.Response.Write("session Is NotNull"); } }参考:http://topic.csdn.net/u/20091119/10/af6bc1a0-6955-4cfa-b9c5-6271c6d64f6c.html?seed=580189784&r=74720121#r_74720121 貌似也行不通, 只因为用session来存 当用户关闭浏览器session会销毁当有会话结束 ,如果用静态类来存的话,用户什么时候结束会话是没法判断的.(我这样认为的,如果有错请指出 ) session 只针对当前会话的。MSDN说的关闭IE时不执行Session_End事件没有人说关闭IE时执行Session_End事件啊??Session_End是在会话超时时触发的,你没有看web.config里面有session的timeout的配置吗? Clobal.asax是全局的,session是某个用户的,肯定取不到,你可以用Application 我session的timeout是20分钟,我只是想说明 Session_End实现不了我想要的效果 ,我给你说下我想实现什么效果吧------------------------------------------------------------1.当用户admin登录后 其它人就不可以用这个账号登录(一个账号不能重复登录)2.在 用户正常退出(点退出按键)或非正常退出(直接关闭浏览器)的情况下,用户刚闭关浏览器(非正常退出)他又想登录的情况下可以正常登录,(系统不提示当前账号已登录) 你只能把timeout设置短一些,或者采取Cookie进行结合判断。或者采取ajax去维护登录信息,或者使用长连接实现。只使用Session的话,注意前提,不经过timeout的时间后做不到的。只能等待20分钟再去登录 IIS 5.1下配置应用程序扩展名映射问题 有什么高性能的方法判断用户是否在线 wap的问题,关于强制转换成WML 后的问题! asp.net 运行后一段时间空白 为什么下面的脚本不能执行啊?那们大侠难帮忙看看。 web程序如何读取客户端的文件? 请问这句是什么意思?(初学者) 求一个简单地登录注册系统就行 web安装包能否实现这样的功能? DataGrid中的按钮列,实现点击时弹出对话框 asp.net 导出数据excel 有几个问题不懂 ASP.net将不规则的Excel表格导入到Gridview中
你应该放在Application或者Cahce对象里面,而不是Session。Session是针对当前会话的。Application.Lock();
ArrayList a;
if(Application["UserInfo"] == null)
{
a = new ArrayList();
a.Add(us);}
else
{
a = Application["UserInfo"] as ArrayList;
a.Add(us);}
Application["UserInfo"] = a;
Application.UnLock();
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes" cookieless="false" timeout="240" stateNetworkTimeout="14400" />
试试
我是想用一个新线程去监视用户是不是在线了 不在线 我就清除application 我只是想实现单点登录的,
可以如果用户不正常退出(直接关闭浏览器), application 里面的值清不了,所以用户想再次登录的时候他会提示已登录//
只因为放在session 里 (用户无论是正常退出,还是直接关闭浏览器)session 都会销毁, 这个新线程每10秒 检测一次session 如果session为空, 那我直接清空application
HttpContext.Current.Session["UserInfo"];
是空的, 但我怎么在cs文件里继承page呢. 我怎么都调不到
一般情况下你是不能坚查Session的,Session只属于当前访问者,
application 里面的值清不了?
这是谁告诉你的?你不会在Session_OnEnd里面清除吗?
继承page也没有用,没有人访问,是没有Session可言的
我用Session_OnEnd试试,不过我想用另一个线程去清的话 我现在的问题有没有好的解决办法, [现大大概知道出错的原因了,是因为程序启动的时候还没有创建session呢, 但是话又说回来, 我是在用户登录之后去判断的 理应是已经有session才是]
Session["UserInfo"] = us;
Session["clearsice"] = true;
Application["isLogin"] = txtUsername.Text.Trim();
MonitorUsers.User_flog(1);
用户登录后才去调用: if (HttpContext.Current.Session["userInfo"] != null)//未创建对象的实例
还望高手指点参考:
http://topic.csdn.net/u/20091119/10/af6bc1a0-6955-4cfa-b9c5-6271c6d64f6c.html?seed=580189784&r=74720121#r_74720121
用户登录之后,也不是凡是HttpContext.Current.Session就有的。你必须从asp.net启动的对页面处理的线程进入,在当前线程上下文环境里才会有。
你说的那Session_End事件 当用户直接关闭浏览器时 是不会被触发的 只能是session过期时才可以被触
[这样一来就有问题: 用户直接关闭浏览器,一会他又想登录系统(session还没过期) 系统就会提示,当前账号已登录!]MSDN说的关闭IE时不执行Session_End事件
你能说下 不能使用另一个线程去清application 或检测当前session 的原因么
问题是现在还好像还没创建 session 再说 我那里已经做了非空判断了
======================================================================
有人用以下方法解决了 但是我的程序中 线程在调用MonitorUsers类时 他不先执行下面方法
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (System.Web.HttpContext.Current.Session["Islogin"] == null)
{
HttpContext.Current.Response.Write("session Is Null");
}
else
{
HttpContext.Current.Response.Write("session Is NotNull");
}
}
参考:http://topic.csdn.net/u/20091119/10/af6bc1a0-6955-4cfa-b9c5-6271c6d64f6c.html?seed=580189784&r=74720121#r_74720121
MSDN说的关闭IE时不执行Session_End事件
没有人说关闭IE时执行Session_End事件啊??Session_End是在会话超时时触发的,你没有看web.config里面有session的timeout的配置吗?
我session的timeout是20分钟,我只是想说明 Session_End实现不了我想要的效果 ,我给你说下我想实现什么效果吧
------------------------------------------------------------
1.当用户admin登录后 其它人就不可以用这个账号登录(一个账号不能重复登录)
2.在 用户正常退出(点退出按键)或非正常退出(直接关闭浏览器)的情况下,用户刚闭关浏览器(非正常退出)他又想登录的情况下可以正常登录,(系统不提示当前账号已登录)
你只能把timeout设置短一些,或者采取Cookie进行结合判断。或者采取ajax去维护登录信息,或者使用长连接实现。只使用Session的话,注意前提,不经过timeout的时间后做不到的。只能等待20分钟再去登录