日期:2014-05-19  浏览次数:20638 次

asp.net中型网站怎样保存用户登陆状态?
第一次自己动手从0开始做一个网站。有关状态保存这块不是很清楚应该怎样做。

我的目标是做“保存一个月”这种功能。

我看了一下最常见的cookie和session。
大致的印象是cookie的安全性很差,session   id是随浏览器进程产生的。关掉再开,又产生了另外一个id,所以不能用来长时间保存状态。

我想来想去,想用如下做法:
(完全是自己凭空想出来的,如果很幼稚不要嘲笑……)

如果用户不选择保存,那就用session。
如果用户选择保存,那么在cookie里面保存当前的session   id,这样能保证唯一性和安全性。在database里面用session   id作键值,保存用户名和过期时间。

当用户打开网站的一个页面,首先判断session有没有登陆。
如果没有,那么查找cookie里面有没有记录。如果有记录,去db里面找到用户名,写入session。

这样结合session   cookies   和database来做状态保存。
--------

以上是我的想法。请有经验的前辈们从惯用方法,我这种方法的安全性,我这种方法的效率等方面,给我些建议。谢谢!

------解决方案--------------------
Cookie就行啊 性能不是太差 而一般用Cookie的东西重要性都不是太高(我没见过哪个网上银行用的^_^)
------解决方案--------------------
帮顶下
------解决方案--------------------
一般的都是用Cookie~~你如果想要很高的安全性就得自己写Active控件!
------解决方案--------------------
不是在cookie和database中保存sessionid,而是保存“授权身份id”!

当用户登录时,不是用用户id来表示用户,而是创建一个新的“授权身份”对象,这个授权身份就像给用户签发一个工作证,再在工作证上写明此证发给哪一个人的。

另外,cookie中仅仅需要保存此授权id号,其它一切信息都可以保存在服务器端——内存、Session、数据库等等,时间可长可短。你会看到很多“例子”中都用cookie保存业务信息,这些其实都可以以此方式保存在服务器端。不但可以控制作废时间,也无需担心“数据安全”问题。

使用cookie的唯一问题,是容易被“冒用”这个id。不过这是废话,只要把id保存在客户端,就一定有这个毛病。除此随机分配的id号以外,没有暴露任何业务信息。
------解决方案--------------------
UP
------解决方案--------------------
cookie是在客户端保存用户的信息,在这里保存,安全性差些,但服务器压力小0

session是在服务器端保存用户的信息,安全性高些,不过会加重web服务器的负担,

所以.. 两者结合
------解决方案--------------------
没有特别要求,直接用cookies完全可以。
------解决方案--------------------
up
------解决方案--------------------
用cookies就可以了
------解决方案--------------------
cookie其实不错的。现在没有太高安全要求的话就选它就成
------解决方案--------------------
cookie中的身份id根本无需加密解密,因此根本不存在被解密的问题。

即使每一次在服务器解密、加密所消耗的时间一点都不可惜,对几个字节的加密有强度吗?如果送几个信息让服务器加密,很快就知道服务器的加密算法了。这种加密是不懂加密的人写的自欺欺人的加密程序。

另外,浏览器与服务器之间每一个上传下载动作都要把所有cookie信息包括进去,不管服务器是否需要。因此,限制cookie的总大小限制在4K 字节以内,而且不能为一个网站保存超过20 个Cookie。

参考文章:

http://www.microsoft.com/china/MSDN/library/archives/library/dv_vstechart/html/vbtchaspnetcookies101.asp

而稍微大一点的系统往往需要为一个临时工作证持有人保存几百K、100个以上的数据。做过稍微大一点的系统的人,不愿意浪费带宽,也不会不顾尺寸限制。