用户登录验证一般用Cookie还是Session?怎样保证安全性?

语过添情 2010-09-30 04:48:58
以前我都在用户登录的时候,验证成功了,存一个Session值,然后其他页面查看这个Session是否存在来判断登录。
但是现在用到Cookie之后,发现很大不同,

1.如果用户第一次登录保存cookie之后,查看别的需要验证的页面也是每次都去读取cookie然后和数据库验证一下吗?这样比较麻烦,而且应该会影响速度吧?

2.我考虑过在刚登录时获取cookie信息验证,通过则生成一个session,但是session有时间。假如用户需要操作很长时间,那不是用着用着就退出了?

3.如果用cookie验证,考虑到安全性,需要在cookie中保存哪些信息?密码应该不保存在cookie中吧?
...全文
4351 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
JL_net 2011-09-10
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 sp1234 的回复:]

假设你在cookie中保存“加密了的”信息,是不是就安全了呢?实际上许多破解,根本不需要解密,直接把密文复制过去用于身份冒充就行了。

实际上在cookie保存一个long型的索引编号就可以了,其它所有信息都保存在服务器端即可。
[/Quote]


赞同楼上
zxj2634 2010-10-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zjwjmmx 的回复:]
引用 3 楼 wufanglu 的回复:
如果要自动登录,cookie肯定是要保存密码的,如果不放心的话,可以给密码加加密再存。

我一般也会用cookie存这些信息,如果viewstate没有则取session的,如果session也没有则取cookie的。


假如给密码MD5加密保存在cookie,那数据库是不是也要保存成MD5?

还一个问题是是不是每个页面都去读取cook……
[/Quote]
是的
yeluxing 2010-10-04
  • 打赏
  • 举报
回复
用FORM验证,具体步骤BAIDU就有了,这是MS的方式,经过加密保存在COOKIES的了,通过Page.User.identity.name 访问已登录的用户名
如果用session , 请用SQL SERVER 方式保存:(下面是方法)
http://www.vduty.com/read.php?tid-478-keyword-sql.html
语过添情 2010-10-04
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 yiruoyun 的回复:]
Cookie 本地裸奔(本地存储数据)
Session 本地装纯情(本地存了索引,异地存储数据)
Certificate 本地与异地暗号沟通,暗语解析(本地私钥加密,异地公钥解密,异地储存数据)

当然是Certificate安全
[/Quote]
额~Certificate没见识过~
ASP199NET 2010-10-03
  • 打赏
  • 举报
回复
这个知识点值得学些学习
肄若芸 2010-10-03
  • 打赏
  • 举报
回复
Cookie 本地裸奔(本地存储数据)
Session 本地装纯情(本地存了索引,异地存储数据)
Certificate 本地与异地暗号沟通,暗语解析(本地私钥加密,异地公钥解密,异地储存数据)

当然是Certificate安全
scyyzgxh 2010-10-02
  • 打赏
  • 举报
回复
学习了//。。
  • 打赏
  • 举报
回复
而对于只在会话期间有用的信息,asp.net自动在cookie中保存SessionID,不需要自己编程。
  • 打赏
  • 举报
回复
假设你在cookie中保存“加密了的”信息,是不是就安全了呢?实际上许多破解,根本不需要解密,直接把密文复制过去用于身份冒充就行了。

实际上在cookie保存一个long型的索引编号就可以了,其它所有信息都保存在服务器端即可。
sdo23 2010-10-01
  • 打赏
  • 举报
回复
用Forms验证,这东西挺方便的,安全性也不错。
Wilson_Zhong 2010-10-01
  • 打赏
  • 举报
回复
要实现多长时间免登陆,必须使用cookie

session采用放在session服务器的话,对服务器的影响也就无所谓了
phil999 2010-10-01
  • 打赏
  • 举报
回复
Membership 是基于 Forms 身份验证的,Forms 身份验证将用户信息保存在cookie里,并提供加密功能,你可以通过 Request.User 知道用户是否登录,他的用户名是什么
秦剑 2010-10-01
  • 打赏
  • 举报
回复
的确有些两难。学习!!
stanvl 2010-10-01
  • 打赏
  • 举报
回复
可以利用Form验证
Inhibitory 2010-10-01
  • 打赏
  • 举报
回复
2.我考虑过在刚登录时获取cookie信息验证,通过则生成一个session,但是session有时间。假如用户需要操作很长时间,那不是用着用着就退出了?

我用的是这种方式。
如果用户登录了,保存用户信息到cookie中。同时生成用户对象的session。
当验证登录时,先从session中找用户,如果session中找到用户,说明已经登录,直接使用此用户对象,如果session中找不到,再从cookie中找用户信息(用户名和密码),如果cookie中有,则查询数据库,再生成相应的session,如果没有,就让用户手动登录。

数据库中用户的密码使用md5(你也可以使用特定的算法加密码,甚至直接用明文),用户信息可以把用户名,md5加密后的密码保存到cookie中。

也可以在cookie中只保存session的ID,然后用户名与密码保存在持久的session中,不过Java中通过session id取得session好像不是太容易,我使用Servlet和Struts2时是这样,就没用这种方式了,不想麻烦。
种草德鲁伊 2010-10-01
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 flyerskill 的回复:]

cookie来保存一些不太重要的东西(比如,浏览记录等),seession用来存放重要的东西(验证状态),用cookie容易受到安全威胁。还有选择用那个,还是根据你的项目。安全性要求不高,又怕影响sever性能就用cookies把,一般人谁没事去给你搞个cookies欺骗呢。。。。。
[/Quote]

session就是依赖保存在cookies里的sessionid的。
FlyerSkill 2010-10-01
  • 打赏
  • 举报
回复
cookie来保存一些不太重要的东西(比如,浏览记录等),seession用来存放重要的东西(验证状态),用cookie容易受到安全威胁。还有选择用那个,还是根据你的项目。安全性要求不高,又怕影响sever性能就用cookies把,一般人谁没事去给你搞个cookies欺骗呢。。。。。
  • 打赏
  • 举报
回复
session的读写使用方法与原来一样。
  • 打赏
  • 举报
回复
session 最好放在数据库 既安全又方便。
种草德鲁伊 2010-09-30
  • 打赏
  • 举报
回复
想不用session,又不查数据库

可以将用户身份验证信息和登录后需要显示的信息序列化,加密以后保存到cookies
加载更多回复(15)

62,074

社区成员

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

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

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

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