求问网站的保持登入是怎么实现的啊?

求问网站个页面间切换时的保持登入是怎么实现的啊?

如果是存储cookiede的话,是存储用户名和密码?那样的话会不会不安全啊?

阅读 8.4k
11 个回答

cookie组成:
aes(user_id,user_salt)
aes是加密(openssl内置支持),服务器解密后根据user_id查询用户的user_salt,如果数据库中用户的user_salt跟cookie中的user_salt一样,则是一个合法有效的cookie.因为攻击者不知道aes加密密钥key,也不知道用户的随机盐user_salt,所以无法伪造这种验证身份的cookie.

其中user_salt是一个用于保护密码的随机值,如:
base64_encode(openssl_random_pseudo_bytes(32));
长度为44个字符.
user_salt这个随机值在用户注册成功时,会修改密码时生成.

浏览器的请求中都带有cookie,将浏览器的cookie与对应session存储起来,当后续访问网站时再将cookie值对应的session信息取出,同时更新cookie,实现自动登录。
现今大多数分布式网站为了保证各服务器的session统一,都会讲session存储在一个内存数据库中,例如redis,然后作为公共服务提供给所有应用服务器,此时做保持登入功能就非常方便,由于内存数据库会对sesssion做过期清除,所以只需要在做保持登入时和每次自动登录时延长该session信息的过期时间就行了

一般都是后台通过session校验的,登陆完以后,后台会在cookie里面加一个http-onlysessionId,每次跳转,后台会有一个拦截器之类的东西,检查session是否存在,是否过期

后端的session只要服务器不重启、没到过期时间、就会跟你的cookie相连、达到你说的保持登入效果

你保存在 cookie 里面的数据可以用 类似 jwt(Json Web Token) 做加密处理后放在 cookie里面,然后就是一段加密信息,发送给服务器后,服务器端在用 jwt(Json Web Token) 做解密,就可以得到 当时的形式,

至于 jwt 自行百度

用cookie,把用户的token或者其他能做唯一识别的信息,比如用户的ID存入cookie,并设定时间,然后每次打开网站,先检测有没有这个cookie,没有就登录,有的话就拿这个ID去数据库取用户信息,名字啊,昵称啊,等等。

cookie一定要加密。

当然也可以用session,它更安全,而且可以让session入库,但是session调取肯定没有cookie快

可以把登录信息保存在数据库里 或者其他位置也行。当登录到期之后。自动调取库里的信息重新执行登录。或者干脆把登录的session保存。到期之后重复值

cookiei里设置HttpOnly脚本就无法获取信息

session
将对应登录的用户username以及其他什么需要存储的信息存入session
比如:menus : req.session.menus,user : req.session.user,
记得存储password的时候要加密
比如: insert into admin(name,password,role_name,privilege,description) values ('admin','7df0df52a127f43fa18a0831fb6b1262','SUPER_ADMIN',256,'XX管理员');
上面这种加密方式 也就是 每注册一个用户 存入到数据库中的password都是经过加密的 这样你保存到session或者cookie中的时候都是没有问题的
以上用了n_user.password = encrypt.encrypt(n_user.password);这种加密方式

依在下薄见
我觉得session怎么说呢,只要涉及存密码就是不安全的
比较妥善的办法我觉得是让后台返回给你一个
uid(根据用户名生成的唯一标识)
utoken(一个根据密码生成的令牌)
将这些存到local中就可以了,一般来说比直接存储密码安全很多
然后你通过是否uid和utoken是否存在来判断是否登陆过了,
登陆过就直接跳转到首页

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题