1
jugelizi 2016-03-30 12:58:36 +08:00
第二种为什么失效?因为你没有设置 sessionid 的有效期呀
|
2
cszchen 2016-03-30 13:07:09 +08:00
第一次登录
1.用户输入用户密码登录 2.验证通过后,保存用户 id 到 session 和 cookie ( cookie 要加密并设置有效期) 3.每次请求都通过用户 id 在数据库查一次 关闭浏览器后再次打开 1.解密 cookie 后,发现有用户 id 2.通过 id 从数据库查找用户 3.确认无误后执行登录操作 4.保存 session 和 cookie (以后的步骤同上) |
3
jones 2016-03-30 13:54:12 +08:00
看 Rails 的 ActionDispatch::Session::CookieStore ,直接山寨一份即可
|
4
f0rger 2016-03-30 14:16:27 +08:00 via iPhone
一般使用方式 3 吧,然后把某个或者全部校验用的设置为 http-only 。
|
5
3dwelcome 2016-03-30 14:47:14 +08:00
用会过期的 auth_id 飘过。
|
6
gamexg 2016-03-30 15:16:35 +08:00 via Android
如果想支持查询已登录的会话就用 4 ,一般只用 session 即可。
方法 3 需要将密码也加入 token ,达到修改密码后所有已登录的会话全部失效。 |
7
holyghost 2016-03-30 15:22:03 +08:00
|
9
gamexg 2016-03-30 17:58:40 +08:00 via Android
@hqfzone 密码加入是比较方便的解决更改密码后注销已登录会话的办法。当然不是直接将原始密码保存下来,而是将数据库保存的 hash 后的密码加入 token 参数里面。
|
10
skydiver 2016-03-30 18:02:49 +08:00
第二种怎么就不行了
session 实际上就是 cookie 存一个 sessionid , cookie 能做到的 session 也能做到 |
11
kirisetsz 2016-03-30 18:18:12 +08:00
一个 userId 然后用 HMAC 校验
|
12
clino 2016-03-30 18:40:30 +08:00 via Android
我觉得一般是第四种吧
|