使用
Sessions.将会话ID存储在cookie中,并将用户的状态存储在服务器端(loggedIn,userId,IP).
澄清您需要存储在会话数组中:
> loggedIn:一个关于用户是否登录的布尔变量.您可以为多个会话重复使用相同的Cookie,因此您可以在下次访问您的网站时记住用户的用户名等.
> userId:数据库中用户的uniqe id.使用它来获取用户的更多信息,如用户名,电子邮件等.在用户注销后,这也可以保存在会话数组中.
> IP:为了防止某人窃取会话ID并使用它,您还可以存储用户的IP.这是可选的,有时您希望允许用户漫游(例如,当IP更改时,stackoverflow允许我使用笔记本电脑进行移动,而无需登录).
> lastPing:用户上次看到的时间戳.可以使用它,而不是cookie过期日期.如果您还存储会话的生命周期,则可以由于不活动而将用户记录在外.这意味着会话id cookie可以存储在用户计算机上很长一段时间.
当用户由于不活动而退出或注销时,只需将loggedIn设置为false即可.当用户使用正确的用户名和密码登录时,将loggedIn设置为true并更新其他字段(userId,IP,lifetime).当用户加载页面时,会根据当前时间和生命周期检查lastPing,并更新lastPing或注销用户.
会话数据可以存储在文件系统或数据库中.如果存储在数据库中,则userId是用户记录的外键,或者所有数据都可以放在用户记录中.
哈希
重复一次值不是一个好主意,因为你reduce the security.而是使用salt,结合静态盐(例如页面的名称)和用户的用户名以及密码.需要很长时间的哈希并不比快速哈希更好,导致大量摘要的散列比导致短消息(由于暴力)的哈希更好.使用SHA1应该足够正常的站点(IE,而不是银行或秘密军事组织).