我现在的想法是定义一个User
对象,其中包括uid
, username
, password
, isLogined
等。然后设置一个拦截器,在用户第一次请求(session开始)的时候,从数据库中根据user.isLogined
判断用户是否登录,如果登录了就在session级别上设置isLogined
等于true,否则就重定向到登录页面。
但是这样的话在用户第一次请求的时候,我应该如何判断用户的身份?如果通过在cookie中设置uid
的话,这个uid可以被其他人伪造,有潜在的安全风险。
请问对于这个问题,有什么好的解决方案?
我主要的问题就是如何判断用户登录身份的合法性,现在我的想法是将user id加密之后保存到cookie当中,这把密钥只有我一个人知道,这样别人即使知道user id也没有办法,请问这样是否合理。
这个风险好大:uid修改为别人的,碰巧那人也登录了,那么就以别人的身份登录了
沿着你的方案走:
1,cookie的uid设置为加密的,或者是无意义的随机串
2,用这个串和db里比对,或者和cache里的比对,同时校验ip或者user agent加强安全性
3,要考虑会话过期策略
首先你的数据库中需要先存储用户信息,设置
isLogined
默认为FALSE
,每次登陆成功后更新为TRUE
,退出后更新为FALSE
;判断登陆成功的标志用userName userPass 匹配,还有isLogined
判断;最后设置判断级别,先isLogined
后用户密码
;建议登录状态不要存储在数据库中,至少也别存在关系型数据库中;可以在用户登录校验完成后,返回token,之后用户的所有请求在headers的authorization字段都带上这个token;可以去了解一下jwt及相关实现
就按你现在的方式,如果我一个匿名用户,没登录,去请求你的某个接口,然后被拦截从数据库中根据user.isLogined判断用户是否登录,那么问题来了。你user.isLogined中的这个user是谁呢?
建议直接登录后把用户登录成功信息放session里,请求的时候拦截器去验证session就好了,不要去访问数据库,每次请求都有这一个访问数据库操作很有消耗的。