Sesstion混乱问题啊,等待高手解决..急啊!

lxiron 2009-10-31 10:36:09


最近做了一个小项目,用户登录信息及用户权限是用Session保存的,现在出现了Session混乱的显现,A计算机用a用户名登录该系统,B计算机用b用户名登陆该系统,结果B操作时记录的确是a的用户名。甚至是c,d ,f等用户名。大家有什么好的办法来控制Session混乱啊,



用cookies会不会发生混乱,急啊!
...全文
202 34 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
34 条回复
切换为时间正序
请发表友善的回复…
发表回复
山上的夜 2009-10-31
  • 打赏
  • 举报
回复
就是谁登陆 都会去改那个静态变量 结果所有的操作都在记录在最后登陆的那个人上了 不信你验证下
z109214114 2009-10-31
  • 打赏
  • 举报
回复
学习了...............
lxiron 2009-10-31
  • 打赏
  • 举报
回复
看来真是个静态变量惹得祸,呵呵!由于在开发阶段只有我一个人在使用,就没有发现这个bug,发布用户用了以后出问题,自己回复结果是别人的名字,就怀疑是session出问题,但具体不知是哪里出问题,事前用静态变量感觉挺好用的,看来以后要慎用呢![Quote=引用 23 楼 lixinramaxel41658133 的回复:]
比如你设定一个全局静态变量A,把Session值赋给这个变量A,,你每个页面涉及到Session的地方都用这个变量A代替,,一开始用的好好的,,等会又有个人登陆进来,,他的值赋给这个全局静态变量A,那么这个值就变了,,而之前的那个登陆人的信息也就跟着变了。。。


你可以取消全局变量,直接string a=Session["UserName"].Tostring()这样子,,或者是直接去取Session["UserName"]的值。。
[/Quote]
阿彪兄 2009-10-31
  • 打赏
  • 举报
回复
估计是程序问题,直接单步调试吧
  • 打赏
  • 举报
回复
比如你设定一个全局静态变量A,把Session值赋给这个变量A,,你每个页面涉及到Session的地方都用这个变量A代替,,一开始用的好好的,,等会又有个人登陆进来,,他的值赋给这个全局静态变量A,那么这个值就变了,,而之前的那个登陆人的信息也就跟着变了。。。


你可以取消全局变量,直接string a=Session["UserName"].Tostring()这样子,,或者是直接去取Session["UserName"]的值。。
fuda_1985 2009-10-31
  • 打赏
  • 举报
回复
就应该用session啊。在asp.net里application算是全局变量了,但是针对所有人的了。除非你用别的办法使其能针对一人,如将用户用list诸如此类的东西放入application,每加一个用户就在list中添加相关信息,这样可以做到,然后用户下线就减去相应人员的信息,还不如使用session呢,只要处理好浏览器意外关闭就好了,或者做个折中的方案,每次登陆写session的时候将session先清空~

如果你在局部弄个变量,你要知道asp.net里页面是回发一次就重新加载一次,你这个局部变量就会重新赋值重新初始化的,
lxiron 2009-10-31
  • 打赏
  • 举报
回复
fuda_1985谢谢你的认真回复,我现在也有点不理解全局变量和静态变量时怎么执行的,难道他们都是针对所有用户的,只要有用户修改它们,然后在获取,他们就改变了 ?

现在这样你看行不行,不要全局变量,及静态变量,用到的时候直接从session中取之,这样就应该不回了吧!
[Quote=引用 19 楼 fuda_1985 的回复:]
你全局变量打算怎么声明。我还真是不懂了。。。
[/Quote]
fuda_1985 2009-10-31
  • 打赏
  • 举报
回复
不能使用application。一样的效果。
fuda_1985 2009-10-31
  • 打赏
  • 举报
回复
你全局变量打算怎么声明。我还真是不懂了。。。
trueman117 2009-10-31
  • 打赏
  • 举报
回复
static不能乱用啊
fuda_1985 2009-10-31
  • 打赏
  • 举报
回复
不能使用全局的。直接将每个用户的权限写到session里去。读session。。。注意意外关闭问题。
lxiron 2009-10-31
  • 打赏
  • 举报
回复
那我改为全局非静态的变量行不?现在这个系统需要紧急解决,问你个弱弱的问题,全局静态变量时针对所有用户声名的,全局变量时针对某一个用户声名的,我这里样的理解对不?[Quote=引用 13 楼 fuda_1985 的回复:]
引用 11 楼 lxiron 的回复:
我的用户名及权限是声名为静态的全局变量,这回影响到其他用户吗?有些不明白,还望大侠说的详细些!引用 2 楼 fuda_1985 的回复:
这应该不是session混乱吧。按你说的a用A机登,b用B机登,session不会串的.
你应该是程序里使用了static变量存一些东西,就会出现这种状况。。。


这不串才怪。。每一个用户登陆后都是改的那个静态的全局变量,也就是你系统里不管登了多少个人都是用的那一个变量,不串才怪啊。
[/Quote]
mbh0210 2009-10-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lxiron 的回复:]
我的用户名及权限是声名为静态的全局变量,这回影响到其他用户吗?有些不明白,还望大侠说的详细些!引用 2 楼 fuda_1985 的回复:
这应该不是session混乱吧。按你说的a用A机登,b用B机登,session不会串的.
你应该是程序里使用了static变量存一些东西,就会出现这种状况。。。

[/Quote]

静态变量变量肯定有问题的,是最后一个登录。
fuda_1985 2009-10-31
  • 打赏
  • 举报
回复
慎用静态变量!!!!
fuda_1985 2009-10-31
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lxiron 的回复:]
我的用户名及权限是声名为静态的全局变量,这回影响到其他用户吗?有些不明白,还望大侠说的详细些!引用 2 楼 fuda_1985 的回复:
这应该不是session混乱吧。按你说的a用A机登,b用B机登,session不会串的.
你应该是程序里使用了static变量存一些东西,就会出现这种状况。。。

[/Quote]
这不串才怪。。每一个用户登陆后都是改的那个静态的全局变量,也就是你系统里不管登了多少个人都是用的那一个变量,不串才怪啊。
fuda_1985 2009-10-31
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wuyq11 的回复:]
在同一电脑中可能存在ssession 串值问题。
代码编写问题。
[/Quote]
哦,想到了,只检查那个用户的那个session是否为空,但是意外关闭没做就串了!~
不过他这程序很有可能是全局变量的问题~

不同机器呀!~
lxiron 2009-10-31
  • 打赏
  • 举报
回复
我的用户名及权限是声名为静态的全局变量,这回影响到其他用户吗?有些不明白,还望大侠说的详细些![Quote=引用 2 楼 fuda_1985 的回复:]
这应该不是session混乱吧。按你说的a用A机登,b用B机登,session不会串的.
你应该是程序里使用了static变量存一些东西,就会出现这种状况。。。
[/Quote]
wuyq11 2009-10-31
  • 打赏
  • 举报
回复
在同一电脑中可能存在ssession 串值问题。
代码编写问题。
SK_Aqi 2009-10-31
  • 打赏
  • 举报
回复
mbh0210 2009-10-31
  • 打赏
  • 举报
回复
检查一下你的程序,在session赋值中之类的有啥问题没有

我估计是你代码有问题,这种问题一般都是自己写的程序造成的
加载更多回复(14)
一:RestApi接口增加JWT认证功能
用户填入用户名密码后,与数据库里存储的用户信息进行比对,如果通过,则认证成功。传统的方法是在认证通过后,创建sesstion,并给客户端返回cookie。 现在我们采用JWT来处理用户名密码的认证。区别在于,认证通过后,服务器生成一个token,将token返回给客户端,客户端以后的所有请求都需要在http头中指定该token。 服务器接收的请求后,会对token的合法性进行验证。验证的内容包括: 内容是一个正确的JWT格式 检查签名 检查claims 检查权限 处理登录 创建一个类JWTLoginFilter,核心功能是在验证用户名密码正确后,生成一个token,并将token返回给客户端: 该类继承自UsernamePasswordAuthenticationFilter,重写了其中的2个方法: attemptAuthentication :接收并解析用户凭证。 successfulAuthentication :用户成功登录后,这个方法会被调用,我们在这个方法里生成token。 二:授权验证 用户一旦登录成功后,会拿到token,后续的请求都会带着这个token,服务端会验证token的合法性。 创建JwtAuthenticationFilter类,我们在这个类中实现token的校验功能。 该类继承自BasicAuthenticationFilter,在doFilterInternal方法中,从http头的Authorization 项读取token数据,然后用Jwts包提供的方法校验token的合法性。 如果校验通过,就认为这是一个取得授权的合法请求。 三:SpringSecurity配置 通过SpringSecurity的配置,将上面的方法组合在一起。 这是标准的SpringSecurity配置内容,就不在详细说明。注意其中的 .addFilter(new JWTLoginFilter(authenticationManager())) .addFilter(new JwtAuthenticationFilter(authenticationManager())) 这两行,将我们定义的JWT方法加入SpringSecurity的处理流程中。 四:简单测试 下面对我们的程序进行简单的验证:
1.请求获取用户列表接口:http://localhost:8080/users/userList接口,会收到403错误
{ "timestamp": 1518333248079, "status": 403, "error": "Forbidden", "message": "Access Denied", "path": "http://localhost:8080/users/userList" } curl http://localhost:8080/users/userList
原因就是因为这个url没有授权,所以返回403
![输入图片说明](https://gitee.com/uploads/images/2018/0211/154022_8d9806ae_130820.png "jwt-1.png") 2.注册一个新用户
curl -H "Content-Type: application/json" -X POST -d '{
"username": "admin",
"password": "password"
}' http://localhost:8080/users/signup
![输入图片说明](https://gitee.com/uploads/images/2018/0211/154042_74fb2aa6_130820.png "jwt-2.png") 3.登录,会返回token,在http header中,Authorization: Bearer 后面的部分就是token
curl -i -H "Content-Type: application/json" -X POST -d '{
"username": "admin",
"password": "password"
}' http://localhost:8080/login
温馨提醒:这里的login方法是spring specurity框架提供的默认登录url ![输入图片说明](https://gitee.com/uploads/images/2018/0211/154308_9576ce90_130820.png "jwt-3.png") 4.用登录成功后拿到的token再次请求/users/userList接口
4.1将请求中的XXXXXX替换成拿到的token
4.2这次可以成功调用接口了
curl -H "Content-Type: application/json"
-H "Authorization: Bearer XXXXXX"
"http://localhost:8080/users/userList" ![输入图片说明](https://gitee.com/uploads/images/2018/0211/154315_241cd6b2_130820.png "jwt-4.png")

62,243

社区成员

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

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

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

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