当我们想在前台页面中做一个记住我的登录功能时,我们会想到两种方法去进行思考。
有时我们想要把用户信息放到客户端上会不会存在安全隐患,这样我们把信息放到服务器端有什么方法可以实现呢?那就只有session才能做到了。
也就是说存放信息有两种方式,一种是存在客户端,另一种就是存在服务器端。
我们先用排除法看看是否两种方法都可以在记住我这个功能上使用。
session:保存在服务器端。
当我们在登录页面中点击记住我,进行登录时,客户端和服务器端是通过http协议进行通讯,在服务器端会给我们注册一个session值,同时服务器端通过http协议向客户端输出一个sessionId,这样我们可以通过sessionid去实现记住我这个功能。但是在细想,session的值就算我们解决了过期时间,但他是和客户端的临时cooke配合着使用,存放在客户端的sessionid只是存在了浏览器当前应用程序中,一旦我们关闭了浏览器,该应用程序所占的内存即立即释放,也就是说sessionid丢失。下次在打开浏览器时,将得不到上一次sessionid的值,那么这样就不用在往下想怎样通过用户名及密码实现记住我的功能。
cooke:保存在客户端:
临时cookie:
持久cookie
临时cooke和持久cooke的区别就是设置一个过期时间,当不设置的时候,称为临时cooke,设置过期时间cooke即将保存在硬盘中:
通过cooke我想到了两种方法去实现他
第一种:
在用户表中加一个字段叫akey,当要写cookie时,生成一个guid(即不会重复,又让用户猜不到别人的akey),把这个guid写入用户的cookie中.
下次用户再来时,我们只检测有没有这个cookie,则证明以前有没有点击记住我过.我们就把guid的值读出来,然后在数据库中找到是谁的.把用户读进实体类,然后赋给Session["currUser"]
第二种:
把用户名和密码写入cookie
用户密码:p
随机产生一个两位的字符:s
加密算法: result = s+md5(s+md5(p)) |