急!进者加分!---asp.net中Session问题:为什么我在一个页面把Session["uid"]=0,即退出系统,可重新打开管理页面仍可进入?

phqde 2004-11-23 02:24:37
急!进者加分!---
asp.net中Session问题:为什么我在一个页面把Session["uid"]=0,即退出系统,可重新打开管理页面仍可进入?就是说Session["uid"]此时并不等于注销时设置的值即Session["uid"]!=0,奇怪,请高手释惑!!!
...全文
218 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
tengjian1981 2004-11-26
  • 打赏
  • 举报
回复
在页面的头上加上<%@ OutputCache Duration="1" VaryByParam="*" %>试试,可能是页面缓存的关系吆!
withnetgo 2004-11-26
  • 打赏
  • 举报
回复
关注中~~~~~~~~~~
xuandme000 2004-11-26
  • 打赏
  • 举报
回复
TomMax(笑望人生)
我的环境是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对象进行操作"是不是有问题!
515189 2004-11-26
  • 打赏
  • 举报
回复
继续学习!帮你顶!强烈要分!谢谢1
bxf2008 2004-11-26
  • 打赏
  • 举报
回复
学习中。。。。。。。。。。。。。。。
vzxq 2004-11-26
  • 打赏
  • 举报
回复
nod
  • 打赏
  • 举报
回复
抱歉,上面的生成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.net1.0/1.1有的毛病,原因是
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执行,那么就一点办法也没有了。
Oldman 2004-11-26
  • 打赏
  • 举报
回复
Global.asax里面是不是设置了什么?
xuandme000 2004-11-26
  • 打赏
  • 举报
回复
同意使用
Session.Abandon();或Session.remove("uid");
你的写法有问题,应该这么写
if(Session["uid"]==null||Session["uid"].ToString().Length==0||((int)Session["uid"])==0)
用上面的方法调试通过!
phqde 2004-11-26
  • 打赏
  • 举报
回复
敬告各位:
我在退出系统时代码如下:
.......
Session["uid"]=0;
Response.Redirect "login.aspx"
.......
而管理界面部分检测是否登陆代码:
if(Session["uid"]==null||Session["uid"].ToString().Length==0||(int)Session["uid"]==0)
{
......
Response.Redirect "login.aspx"
......

}
dzvsyt 2004-11-23
  • 打赏
  • 举报
回复
Session.Abandon()
把session释放掉!
「已注销」 2004-11-23
  • 打赏
  • 举报
回复
当你进入的页面时候是做什么样的检验呢?
phqde 2004-11-23
  • 打赏
  • 举报
回复
敬告各位:
如果把管理界面刷新一次Session["uid"]就等于0了,也即是说:彻底退出系统了,为什么要刷新一次才会达到这种目标呢?
ririye3909 2004-11-23
  • 打赏
  • 举报
回复
Session.remove("uid")
colinliu 2004-11-23
  • 打赏
  • 举报
回复
Session.Abandon()
sportdog 2004-11-23
  • 打赏
  • 举报
回复
跟踪看看是否重新赋值了!
anycall2004 2004-11-23
  • 打赏
  • 举报
回复
重新打开的时候看看Session 有没有被另外赋值
chenchanggang 2004-11-23
  • 打赏
  • 举报
回复
你是不是从新进入了该系统,那就是又初始化新的session,所以此时应该是null
zxilu 2004-11-23
  • 打赏
  • 举报
回复
System.Web.Security.FormsAuthentication.SignOut();
Session.Abandon()

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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