关于部分用户登录session失效,提示未将对象引用到实例

时间:2022-04-10 08:42:59
用.net开发了一个网站,登录后如果检验成功  则跳转到相应页面(Response.Redirect)
在登录页面产生校验码 和输入的校验码对比

代码如下: 

if (CheckCode.ToLower() != Session["checkCode"].ToString().ToLower())
  {
            myDbAccess.ExeJs("alert('系统提示:你输入的校验码不正确!');", Page);
            return;
  }

多数用户都没有问题

只有极个别用户登录是提示if (CheckCode.ToLower() != Session["checkCode"].ToString().ToLower())这句话出错

提示“未将对象引用到实例” 

在我自己的机器*问将cookie禁用后也是出现上述问题,所以我认为是客户端的cookie没有启用,但是我查看客户端确实是启用的。

该如何解决这个问题,有没有人遇到过?


我写一个很简单的页面,在当页产生的session,本页可以访问,一旦跳转到其他页面,再去读取去session 就出现session未将对象引用到实例。


郁闷中......

25 个解决方案

#1


if (CheckCode.ToLower() != Session["checkCode"].ToString().ToLower())
  {
  myDbAccess.ExeJs("alert('系统提示:你输入的校验码不正确!');", Page);
  return;
  }
=>
if(Session["checkCode"]==null)
{
   myDbAccess.ExeJs("alert('系统提示:校验码未生成!');", Page);
  return;
}
if (CheckCode.ToLower() != Session["checkCode"].ToString().ToLower())
  {
  myDbAccess.ExeJs("alert('系统提示:你输入的校验码不正确!');", Page);
  return;
  }

#2


工具-> 文件夹选项-> 在不同的窗口中打开不同的文件夹 
也可能让Session 失效 。不怎么稳定 。
看能用Cookie协作不 。

#3


应该不是Session的问题,Session是存储在服务器端的,跨页面都是有效的。
如果user有一个有效的session,并且session没有过期,那么在程式页面都是
可以读取到这个session的。

#4


为null的时候 还 ToString() 当然会报错.

#5


引用 1 楼 sandy945 的回复:
if (CheckCode.ToLower() != Session["checkCode"].ToString().ToLower())
  {
  myDbAccess.ExeJs("alert('系统提示:你输入的校验码不正确!');", Page);
  return;
  }
=>
if(Session["checkCode"]==null)
{
   myDbAcce……

这样写 起码不报错了。

#6


你要确定session里面有值才行,不然tostring会出错的

#7


不要乱tostring
P哥告诉我的

#8


session【xxxx】别tostring。

#9


引用 1 楼 sandy945 的回复:
if (CheckCode.ToLower() != Session["checkCode"].ToString().ToLower())
  {
  myDbAccess.ExeJs("alert('系统提示:你输入的校验码不正确!');", Page);
  return;
  }
=>
if(Session["checkCode"]==null)
{
  myDbAccess……
+++

#10


我的Session["checkCode"]是页面一载入就生成的一个校验码图片,用户需要输入校验码,然后登录,点击登录的时候,报这个错误的。

是部分用户出现这个情况,大多数没有错误。

#11


你这个情况就是客户端cookie未写入导致的

Session的实现是依托于cookie的

#12


是Session 丢失了
Session  有效时间设置长点        

#13


该回复于2011-11-17 10:09:31被版主删除

#14


引用 11 楼 sandy945 的回复:
你这个情况就是客户端cookie未写入导致的

Session的实现是依托于cookie的



怎么设置呀,我看客户端是启用的呀,难道还有别的地方那个限制吗?

有一台win7 的ie9

有一台xp 的ie6

还有 VISTA ie8

#15


引用 12 楼 liukaizxc 的回复:
是Session 丢失了
Session  有效时间设置长点


就登录的一瞬间就消失了。

#16


清空缓存 再试下

#17


Session.Timeout = 10; 这样就是10分钟了 登录页面加载的时候设置下吧

#18


引用 16 楼 sandy945 的回复:
清空缓存 再试下


不行 当页生成的session 只在当页有效

#19


什么原因呀,几台电脑就是登录不上,郁闷死了....................

#20


先判断Session里是否有值,再进行ToString(),如果Session为Null的话,是无法进行TOString滴,所以会报错滴

#21


if (Session["checkCode"]!=null && CheckCode.ToLower() != Session["checkCode"].ToString().ToLower())

#22


引用 20 楼 xinber 的回复:
先判断Session里是否有值,再进行ToString(),如果Session为Null的话,是无法进行TOString滴,所以会报错滴


现在的问题是这几台电脑获取不到登录时系统分配的校验码(ession["checkCode"])

如果先判断Session里是否有值,程序是不出错了,但是无法登录,也就是永远验证不过去。

#23


关键可能是session失效了,这个LZ可以去了解下session的几种保存方式,所以在使用session一定要判断下该会话内容是否还存在

#24


多谢各位了,郁闷中......

#25


<sessionState mode="StateServer",试试

#1


if (CheckCode.ToLower() != Session["checkCode"].ToString().ToLower())
  {
  myDbAccess.ExeJs("alert('系统提示:你输入的校验码不正确!');", Page);
  return;
  }
=>
if(Session["checkCode"]==null)
{
   myDbAccess.ExeJs("alert('系统提示:校验码未生成!');", Page);
  return;
}
if (CheckCode.ToLower() != Session["checkCode"].ToString().ToLower())
  {
  myDbAccess.ExeJs("alert('系统提示:你输入的校验码不正确!');", Page);
  return;
  }

#2


工具-> 文件夹选项-> 在不同的窗口中打开不同的文件夹 
也可能让Session 失效 。不怎么稳定 。
看能用Cookie协作不 。

#3


应该不是Session的问题,Session是存储在服务器端的,跨页面都是有效的。
如果user有一个有效的session,并且session没有过期,那么在程式页面都是
可以读取到这个session的。

#4


为null的时候 还 ToString() 当然会报错.

#5


引用 1 楼 sandy945 的回复:
if (CheckCode.ToLower() != Session["checkCode"].ToString().ToLower())
  {
  myDbAccess.ExeJs("alert('系统提示:你输入的校验码不正确!');", Page);
  return;
  }
=>
if(Session["checkCode"]==null)
{
   myDbAcce……

这样写 起码不报错了。

#6


你要确定session里面有值才行,不然tostring会出错的

#7


不要乱tostring
P哥告诉我的

#8


session【xxxx】别tostring。

#9


引用 1 楼 sandy945 的回复:
if (CheckCode.ToLower() != Session["checkCode"].ToString().ToLower())
  {
  myDbAccess.ExeJs("alert('系统提示:你输入的校验码不正确!');", Page);
  return;
  }
=>
if(Session["checkCode"]==null)
{
  myDbAccess……
+++

#10


我的Session["checkCode"]是页面一载入就生成的一个校验码图片,用户需要输入校验码,然后登录,点击登录的时候,报这个错误的。

是部分用户出现这个情况,大多数没有错误。

#11


你这个情况就是客户端cookie未写入导致的

Session的实现是依托于cookie的

#12


是Session 丢失了
Session  有效时间设置长点        

#13


该回复于2011-11-17 10:09:31被版主删除

#14


引用 11 楼 sandy945 的回复:
你这个情况就是客户端cookie未写入导致的

Session的实现是依托于cookie的



怎么设置呀,我看客户端是启用的呀,难道还有别的地方那个限制吗?

有一台win7 的ie9

有一台xp 的ie6

还有 VISTA ie8

#15


引用 12 楼 liukaizxc 的回复:
是Session 丢失了
Session  有效时间设置长点


就登录的一瞬间就消失了。

#16


清空缓存 再试下

#17


Session.Timeout = 10; 这样就是10分钟了 登录页面加载的时候设置下吧

#18


引用 16 楼 sandy945 的回复:
清空缓存 再试下


不行 当页生成的session 只在当页有效

#19


什么原因呀,几台电脑就是登录不上,郁闷死了....................

#20


先判断Session里是否有值,再进行ToString(),如果Session为Null的话,是无法进行TOString滴,所以会报错滴

#21


if (Session["checkCode"]!=null && CheckCode.ToLower() != Session["checkCode"].ToString().ToLower())

#22


引用 20 楼 xinber 的回复:
先判断Session里是否有值,再进行ToString(),如果Session为Null的话,是无法进行TOString滴,所以会报错滴


现在的问题是这几台电脑获取不到登录时系统分配的校验码(ession["checkCode"])

如果先判断Session里是否有值,程序是不出错了,但是无法登录,也就是永远验证不过去。

#23


关键可能是session失效了,这个LZ可以去了解下session的几种保存方式,所以在使用session一定要判断下该会话内容是否还存在

#24


多谢各位了,郁闷中......

#25


<sessionState mode="StateServer",试试