求问网站个页面间切换时的保持登入是怎么实现的啊?
如果是存储cookiede的话,是存储用户名和密码?那样的话会不会不安全啊?
浏览器的请求中都带有cookie,将浏览器的cookie与对应session存储起来,当后续访问网站时再将cookie值对应的session信息取出,同时更新cookie,实现自动登录。
现今大多数分布式网站为了保证各服务器的session统一,都会讲session存储在一个内存数据库中,例如redis,然后作为公共服务提供给所有应用服务器,此时做保持登入功能就非常方便,由于内存数据库会对sesssion做过期清除,所以只需要在做保持登入时和每次自动登录时延长该session信息的过期时间就行了
一般都是后台通过session
校验的,登陆完以后,后台会在cookie
里面加一个http-only
的sessionId
,每次跳转,后台会有一个拦截器之类的东西,检查session
是否存在,是否过期
你保存在 cookie 里面的数据可以用 类似 jwt(Json Web Token) 做加密处理后放在 cookie里面,然后就是一段加密信息,发送给服务器后,服务器端在用 jwt(Json Web Token) 做解密,就可以得到 当时的形式,
至于 jwt 自行百度
用cookie,把用户的token或者其他能做唯一识别的信息,比如用户的ID存入cookie,并设定时间,然后每次打开网站,先检测有没有这个cookie,没有就登录,有的话就拿这个ID去数据库取用户信息,名字啊,昵称啊,等等。
cookie一定要加密。
当然也可以用session,它更安全,而且可以让session入库,但是session调取肯定没有cookie快
用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
或者cooki
e中的时候都是没有问题的
以上用了n_user.password = encrypt.encrypt(n_user.password);
这种加密方式
依在下薄见
我觉得session怎么说呢,只要涉及存密码就是不安全的
比较妥善的办法我觉得是让后台返回给你一个
uid(根据用户名生成的唯一标识)
utoken(一个根据密码生成的令牌)
将这些存到local中就可以了,一般来说比直接存储密码安全很多
然后你通过是否uid和utoken是否存在来判断是否登陆过了,
登陆过就直接跳转到首页
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
5 回答1.9k 阅读
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这个随机值在用户注册成功时,会修改密码时生成.