用cookie保存登录验证信息时,浏览每个页面都需要与数据库验证?

newdigitime 2009-08-06 02:09:10
很多时候我们都通过cookie验证用户登录信息,这样在浏览某个页面时,
系统会自动读取某些cookie,如果不为空,则与数据库用户帐户及密码进行对比,
如果通过,就表明此用户成功登录,好处在于不需要用户再次输入帐号与密码。

现在的问题是,难道每浏览一次页面,就需要重复上面的操作“读取cookie-与数据库对比”?
这样对系统资源占用太大了吧。
使用cookie本意之一是取代session保存信息,以便降低系统开销(当然也有方便用户下次登录时免去输入之苦),如果按上面的处理办法,反而加大了系统资源占用。

大家有好的解决办法么。我想了一些办法,但感觉都不是很好:

1.用cookie保存一个有效期,下次浏览网站时,系统自动验证,然后通过session保存一个bool值,
表明此用户已登录,浏览不同的页面时,通过session来判断是否登录,免去读数据库操作。
不足之处:在线用户较多时,session将占用较多系统资源,特别是内存占用。

2.第二种办法:当系统读取cookie中的帐户与密码信息,并与数据库数据对比成功后,向cookie中写入另一个键值,表明此用户已成功登录。这样在浏览不同的页面时,可以根据这个cookie的值来判断是否已登录。问题是,如果此cookie用一个固定值,如cookie("login")=1,那么恶意用户可以伪造这个cookie("login"),失去意义。改进办法是:对用户帐户名或密码或ip进行某种加密,将得到的加密值写入cookie("login")。这样恶意用户就很难伪造。
不足之处:每点击打开一个页面,系统就会对cookie("login")进行解密运算,将得到值与ip或用户名进行对比。这样会导致CPU资源耗用较大。

3.第三种办法:最佳办法,请高手指点
...全文
662 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
me_child 2009-08-06
  • 打赏
  • 举报
回复
不错的讨论 mark。
少华_56 2009-08-06
  • 打赏
  • 举报
回复
session 有时间限制 放cookie中能好点吧
newdigitime 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 lsh8656 的回复:]
  应该是提交时验证吧

[/Quote]
如果是我设计,我可能会采用提交时验证。或者在第一次验证通过后,将验证bool值放在session中。
少华_56 2009-08-06
  • 打赏
  • 举报
回复
应该是提交时验证吧
newdigitime 2009-08-06
  • 打赏
  • 举报
回复
顺带问一下。CSDN这个论坛,是每打开一个贴子,下面都有一个“回复框”用于回复,显然系统必须对回复者进行验证吧。问题是:是每点击打开一个贴子,就对cookie有效性进行后台验证,还是在“提交回复”时,才对cookie有效性进行验证?
Dobzhansky 2009-08-06
  • 打赏
  • 举报
回复
并非所有的页面都需要的, 比如公司简介, 招聘启事的页面, 就省了吧
newdigitime 2009-08-06
  • 打赏
  • 举报
回复
看来没什么更好的办法了。
和“好货不便宜,便宜无好货”的理论相通,要想保证一定程度的安全性,系统开销是必
不可少了,用cookie保存有效期的唯一价值就是省去了用户输入之苦。

准备这样:
1,普通网页浏览不必重复判断用户是否有效登录。这样可以减少系统开销。
2.对特殊网页或操作,对cookie中的值用某个特殊的Key值进行对等解密验证,有一定系统开销,但不必读数据库。
3.对极重要的操作,让用户输入密码,然后与数据库中的值进行对比。

newdigitime 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zyzzyh008 的回复:]
采用asp.net的forms认证
[/Quote]
forms验证其实也属于cookie认证(asp.net封装了),它的安全也在于对cookie加密,然后在后台用一个散列值对cookie进行解密验证,加上其它的控件开销,这种验证系统开销更大。
zyzzyh008 2009-08-06
  • 打赏
  • 举报
回复
采用asp.net的forms认证
newdigitime 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 nsl204 的回复:]
下次用户登录的时候就不在需要到服务器上认证了,
如果用户填写的信息与cookie中的一致,就会允许登录网站~
[/Quote]
下次登录时,还需要“用户填写”?然后与cookie对比?有哪个网站通过cookie保存验证信息,并设了一个有效期时,如一周,在一周内登录时,还需要用户重新填写?

就算有某个网站会用你这种办法。
那恶意用户岂不是更省事了?在cookie中写入“别人的帐户与密码”,然后登录时,只要恶意用户的“用户填写”与自己伪造cookie中的帐户一样,就能成功登录了?
nsl204 2009-08-06
  • 打赏
  • 举报
回复
cookie是第一次认证成功后,把用户正确的认证信息保存在客户端
下次用户登录的时候就不在需要到服务器上认证了,如果用户填写的
信息与cookie中的一致,就会允许登录网站,不存在lz所说的情况~
newdigitime 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhulong1111 的回复:]
顶下 第一次登陆就在客户端生成个XML文件 以后跳转判断下这文件存在不 就行了哦,当然页面关闭之前把这Xml 销毁 。个人思路
[/Quote]
谢谢,在客户端能生成XML文件吗?就算可以,这与保存在客户端的cookie没多少区别嘛。

关键是如何在用很少的系统资源的前提下来验证客户端cookie或你说的XML中值的合法性。
或者说在第一次较高系统资源的验证后,把验证结果临时保存下来(这个临时结果很难伪造),在接下来浏览其它页面时,只是简单地判断一下这个验证结果。
newdigitime 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lovely_baby 的回复:]
设置好时间!
[/Quote]
你是说有效期吧。我现在想解决的不是这个问题。
我是想了解,如何降低通过cookie中保存值来验证用户是否登录时的系统开销。
zhulong1111 2009-08-06
  • 打赏
  • 举报
回复
顶下 第一次登陆就在客户端生成个XML文件 以后跳转判断下这文件存在不 就行了哦,当然页面关闭之前把这Xml 销毁 。个人思路
Lovely_baby 2009-08-06
  • 打赏
  • 举报
回复
设置好时间!
newdigitime 2009-08-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 takako_mu 的回复:]
cookie是保存在用戶端,和數據庫驗證沒關系.
[/Quote]
如果不和数据库进行对比验证,怎么确定这cookie是合法值,有效值呢。
takako_mu 2009-08-06
  • 打赏
  • 举报
回复
你把cookie的用法仔細看一邊,其意自現.
takako_mu 2009-08-06
  • 打赏
  • 举报
回复
cookie是保存在用戶端,和數據庫驗證沒關系.

62,046

社区成员

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

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

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

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