急!进者加分!---
asp.net中Session问题:为什么我在一个页面把Session["uid"]=0,即退出系统,可重新打开管理页面仍可进入?就是说Session["uid"]此时并不等于注销时设置的值即Session["uid"]!=0,奇怪,请高手释惑!!!
asp.net中Session问题:为什么我在一个页面把Session["uid"]=0,即退出系统,可重新打开管理页面仍可进入?就是说Session["uid"]此时并不等于注销时设置的值即Session["uid"]!=0,奇怪,请高手释惑!!!
解决方案 »
- 求一SQL语句 谢谢
- 动态生成表格,表格的每个单元格都编号且都可以超链接到另外一个网页
- 在子页面存在的情况下,再次点击父页面的打印按钮如何让这两次只弹出一个B?
- asp.net 下脚本代码分析???顶顶顶顶顶顶顶顶顶顶顶顶
- HyperLink3.ImageUrl中,我设制了图片的路径,要如何设制这个图片的的高和宽呀
- 如何在点IE自带的后退按钮后让网页自动过期呢?
- 苦求<ASP.NET技术内幕>第二版中文版 (最好是pdf 或 chm版本格式)
- 课题探讨:.Net环境下报表的开发
- 调用JS文件的问题?
- 我将textbox的内容写入access时出错,不知怎么改!
- Session的问题求教
- 分不够再加,在线急等!
Session.Abandon()
如果把管理界面刷新一次Session["uid"]就等于0了,也即是说:彻底退出系统了,为什么要刷新一次才会达到这种目标呢?
把session释放掉!
我在退出系统时代码如下:
.......
Session["uid"]=0;
Response.Redirect "login.aspx"
.......
而管理界面部分检测是否登陆代码:
if(Session["uid"]==null||Session["uid"].ToString().Length==0||(int)Session["uid"]==0)
{
......
Response.Redirect "login.aspx"
......}
Session.Abandon();或Session.remove("uid");
你的写法有问题,应该这么写
if(Session["uid"]==null||Session["uid"].ToString().Length==0||((int)Session["uid"])==0)
用上面的方法调试通过!
Response.Redirect "login.aspx";这句代码的毛病。
这个代码的作用是通过一个特殊的http标头信息指示客户端浏览器重定向,而asp.net中的Session对象和Cookie对象在赋值操作时后面如果跟Response.Redirect这样的方法时,服务器无法对Session对象和Cookie对象进行操作。说白了就是如果有这样的代码:
Response.Cookies.Add(...);
Session.Add(...);
Response.Redirect(...);
那么前面两行操作Cookie/Session的代码都无效,这是asp.net的原因,没有任何办法。解决方法是使用js脚本执行重定向,方法是:// 首先操作Session
Session["uid"]=0;// 然后构造一个Js脚本,为了美观,用StringBuilder建立字符串。
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("<script language=\"javascript\" type=\"text/javascript\">\r\n");
sb.Append("<!--\r\n");
\\ 表示在客户端IE把html内容载入后再执行
sb.Append("function window.onload()\r\n");
sb.Append("{\r\n");
sb.Append("window.location.href = \"login.aspx\";\r\n");
sb.Append("}\r\n");
sb.Append("</script>\r\n");// 注册脚本
if(!Page.IsRegisterStartupScript("myRedirScript"))
Page.RegisterStartupScript("myRedirScript", sb.ToString());
这个方法可以保证让你的Session和Cookie得到正确的处理,绝对不会丢失。
不过如果客户端关闭了js执行,那么就一点办法也没有了。
// 首先操作Session
Session["uid"]=0;// 然后构造一个Js脚本,为了美观,用StringBuilder建立字符串。
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("<script language=\"javascript\" type=\"text/javascript\">\r\n");
sb.Append("<!--\r\n");
\\ 表示在客户端IE把html内容载入后再执行
sb.Append("function window.onload()\r\n");
sb.Append("{\r\n");
sb.Append("window.location.href = \"login.aspx\";\r\n");
sb.Append("}\r\n");
sb.Append("//-->\r\n");
sb.Append("</script>\r\n");// 注册脚本
if(!Page.IsRegisterStartupScript("myRedirScript"))
Page.RegisterStartupScript("myRedirScript", sb.ToString());
我的环境是asp.net 1.1.43
第一个页面
webform1.aspx
private void Page_Load(object sender, System.EventArgs e)
{
Session.Add("id",0);
Response.Redirect( "webform2.aspx" );
}
第二个页面
webform2.aspx
private void Page_Load(object sender, System.EventArgs e)
{
if( (int)(Session["id"] ) ==0)
{
Response.Write("ok");
}
}
测试结果是有"ok"
那你说的
"这个代码的作用是通过一个特殊的http标头信息指示客户端浏览器重定向,而asp.net中的Session对象和Cookie对象在赋值操作时后面如果跟Response.Redirect这样的方法时,服务器无法对Session对象和Cookie对象进行操作"是不是有问题!