asp.net session存值出现混乱?怎么解决

我在登录界面用session存了用户的id,在用户发表文章的界面,用到了session保存的用户id,如果单独一个用户发表文章的话,不会出现问题。当是如果多个用户同时登录,发表文章就会出现session存值混乱,我发表的文章就变成别人发表的文章了。请各位高手帮帮忙解决一下。如果能解决问题的话,分不是问题,我这有的是。

让所有网民去装IE8毕竟是不现实的.
你在一台机器上再次登录,本来就已经修改了原来的Session值了,当然保存时会采用为新的UserID.
所以说这是正常现象,本来不用修改.
但是,如果你非要实现以当时登录的UesrID来保存文章的话,你必须把UesrID保存到当前页中,而不是Session中,也就是在加载页面时,立即将Session中的UserID保存到一个变量中,如:
Dim UserId as string = Session("UserID").tostring
而在保存时,你的SQL语句要取UserID的值来保存,而不能去取现在的Session("UserId")的值.
这样做还有个好处是当你写文章的时间超过了Session的超时限制,你不用重新登录即可保存文章,但是坏处也不小,因为你会发现当你文章写了一半,才发现还没有登录时,你要么以空ID保存,要么就另外登录,重定文章......
所以说,建议你不要修改.
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-01-25
你建立session的时候用 userid作为前缀名就没有问题了:
如:
Session[user1+"_session"] = xxx;
Session[user2+"_session"] = xxx;
Session[user3+"_session]" = xxx;
user1 - user3 代表登录用户的 id,就是一个变量,然后用这个变量来拼字符串,再把整个拼接后的字符串作为 session 的key。

我们以前的项目都是这么做的,你可以再封装一个读取session的方法,根据用户id来查找不同的session。
第2个回答  2011-01-25
Session本来就是用于特定用户的,出现你说的情况是不是你在机器上开了几个浏览器同时访问?如果是的话会出现串号的现象。如果你用是IE8这个问题还可以解决(你每次选择新建一个会话),如果是8以下的版本就没辙了。只能开一个帐号。
第3个回答  2011-01-25
建议楼主先了解清楚session、application、viewstate、cookie区别。楼主讲的问题应该是在同一个机器上用多个用户登录造成的。session是一个用户一个对象,虽然你用另外用户登录了,但对象还是原来那个,造成了把上一个用户信息给覆盖了。原来我们做的方法是把userid存放在token里放url里做参数,进任何页面都需要在url里加上这个存放用户信息的token,每次从url里获取参数然后解析。这样能解决掉该问题。
第4个回答  2011-01-25
正常情况下,应该不会出现这样的问题,因为每次创建sesstion,都会有个唯一的sesstionID,获取sesstion值的时候,会根据sesstionID取值。你可以先检查下你的代码是否有问题。检查代码是非常重要的。如果不是代码问题
你可以试试cookie+sesstion双重验证。客户端存储+服务器存储,取值时判断cookie和sesstion值是否相同,相同就是正常用户。
第5个回答  2011-01-25
发代码!单看你说的情况,总觉得比火星人入侵地球出现的机率都要小。

Asp.Net处理Session失效解决方案
如果你有更高的要求 需要在服务期重启时Session也不丢失 可以考虑将mode设定成SQLServer 同样需要修改sqlConnectionString属性 关于使用SQLServer保存Session的操作 在使用StateServer或者SQLServer存储Session时 所有需要保存到Session的对象除了基本数据类型(默认的数据类型 如int string等)外 都必须序列化 只需将...

我使用session(ASP.NET)保存登陆信息。登陆后过了一会竟然自动退出了...
你设置一下session的生存周期吧!你可能用的是别人的服务器,他会设施相应的时间,主要是为了减轻服务器压力。

关于session使用问题,莫名其妙丢失了!
第一种解决办法是:使杀病毒软件屏蔽扫描Web.Config文件(程序运行时自己也不要去编辑它)第二种是检查代码有无Session.Abandon()之类的。第三种是在Window服务中将ASP.NET State Service 启动。

asp.net session老是丢失
解决办法:1.当您在负载平衡的 Web 场环境中运行 ASP.NET Web 应用程序时,一定要使用 SqlServer 或 StateServer 会话状态模式,在项目中我们基于性能考虑并没有选择SqlServer模式来存储Session状态,而是选择一台SessionStateServer 服务器来用户的Session会话状态。我们要在系统配置文件web.config中设置如下:...

session取不到值 c# asp.net
1.页面2加载时页面1是否已加载完成,比如在frameset中就有加载顺序的问题 2.看看有什么地方是否情况过这个session的值 3.。。。不同情况有不同解决办法,这个的根据你的项目来,就代码看是没有错误的。提醒你一下,至少在取值的时候加上保护性的判断。如 if(seesion["tname"]!=null && seesion["...

asp.net中session值为空怎么解决?
你的Session取出来的值是空的。一点,你尝试第二次刷新页面,看是否能够正常。分析原因,cookie存储的SessionId跟服务器的不一致,也就是没有更新,自然取不出来。如果是这样,你进入网页时重载该页面来解决。二点,检验是否存好了会话数据。尝试:while(Session["UserName"] == null){ Session["...

管家婆.net版本出现的问题怎么解决啊!
因为多台服务器之间无法实现Session同步),StateServer与SqlServer可应用于web服务器集群场景,但是性能有所降低;如果希望Session能持久化保存,SqlServer是唯一的内置方案。总结:了解了asp.net Session的知识后,你的问题也就容易解决了,配置你的数据库或者直接采用InProc模式,即进程内模式 ...

Asp.net用session存东西是否是很占服务器资源?为什么?
(4)服务器内有一进程,监视所有Session的活动状况,如果有Session超时或是主动关闭,服务器就释放改内存块。(5)当浏览器连入IIS时并请求的ASP内用到Session时,IIS就读浏览器Cookie中的Session ID。(6)然后,服务检查该Session ID所对应的内存是否有效。(7)如果有效,就读出内存中的值。(8)如果无效,...

asp.net页面刷新控件的数据不保持
asp.net页面刷新控件的数据不保持的解决方法如下。1、点击要刷新页面,值存储在viewstate,session等。2、保持数据,取出来即可。

asp.net中,当我浏览一个.aspx文件时显示Session已经过期,请重新登陆什 ...
出现这种情况是因为当前程序 会员登录是用Session保存登录状态的, 默认的情况下,你登录成功之后20分钟内,不对当前网页进行操作或者是说不移动鼠标,页面的登录状态就丢失了,要求你重新登录就OK了。当然你可以使用web.config该更Session默认的值或者使用Cookie来保存登录状态。

相似回答