如果有人登录,我会保存2个会话。
Session["userid"]
Session["nickname"]
Session["userid"]
用于从数据库中检索有关用户的数据。
Session["nickname"]
用于将用户重定向到他的个人资料页面
(示例:www.test.com/mike
(在这种情况下,''Mike''是昵称。)
我想知道这个想法是否安全?是建议这样做,还是有其他更好的选择?
答案 0 :(得分:1)
您不是在会话中存储两个会话,而是存储两个变量。有两个变量没有根本的错误,我唯一的想法是如果更新nickname
会发生什么?每次使用userid
作为键而不是在登录发生后修复静态变量时,从DB中查找昵称不是更好吗?
话虽如此,使用表单身份验证票证比使用Session更安全。请看这里有一些很好的理由:https://stackoverflow.com/a/18077422/413180
答案 1 :(得分:0)
我没有看到一个大问题,除非以后可以更改某个用户的昵称。在这种情况下,用户配置文件的URL将会更改,您应该正确调整所有链接。
对于URL,我会使用UID。并将它存储在SESSION变量中。例如,如果用户更改其中一个SESSION变量的值,会发生什么?你会在每个页面加载中验证它吗?
答案 2 :(得分:0)
如果数据是安全的或不安全的,那么数据是否存储在两个单独的Session
对象中并不重要。因此,如果某人可能恶意使用用户ID或昵称,那么它就是不安全的;否则没有。
我通常将用户信息存储在一个名为Session
的{{1}}对象中,该对象代表一个类的实例。在您的情况下,创建一个只包含两条信息的类可能有点过分。
我建议不要仅使用昵称作为网址,因为如果LoggedOnUser
值发生变化怎么办?用户ID似乎更合适,因为它不太可能改变,如果有的话。这就是StackOverflow如何使用您的用户个人资料(nickname
),如果您有以前的昵称,那么旧昵称将根据您的用户ID值映射到当前昵称。
答案 3 :(得分:0)
简短回答:这是不安全的
如果您不使用SSL,用户会话可能会被特别劫持,这只是时间问题,取决于一些因素,例如黑客的专业性,她拥有的设施等等。
作为一种解决方案,我建议你使用Forms Authentication。
如果你仍然坚持使用Session来存储这种敏感信息的类型,那么我建议你生成一个临时密钥(一个GUID用于示例)并将该密钥与特定时间量关联到用户对象(您需要将此密钥存储在db中)。您还可以将更多信息绑定到此密钥,例如客户端的IP地址。将此临时密钥存储在Session中并仅在此密钥有效且IP地址没有可疑更改时才处理请求。