我正在网站上工作,想要创建用户登录和会话。什么是检查会话是否存在的最安全的方法(如cookie或会话变量检查),或者更好的想法然后在php中使用会话?
答案 0 :(得分:8)
session_id()
返回当前会话的会话ID或空字符串(“”),如果没有当前会话(不存在当前会话ID)。
但这只会告诉您会话是否处于活动状态。
大部分时间,我只是在每个脚本的开头调用session_start();
(即使用户没有登录)。在登录时,我使用userid或用户对象设置$_SESSION['user']
。注销时,我只是unset($_SESSION['user']);
。通过检查empty($_SESSION['user'])
我可以检查某人是否仍然登录。如果您在会话中的其他位置存储依赖于用户的信息,请不要这样做,否则登录的下一个人可能会收到他不应该看到的信息(在这种情况下使用session_destroy();
)。
session.use_only_cookies
来实现。
如果您托管在不受信任和/或配置错误的共享服务器上,可能会出现其他安全问题 - 这可能会导致同一台计算机上的其他人读取您的会话数据。在这种情况下,您可以通过重写会话处理程序将会话数据存储在数据库中。只需在intertubes上搜索session handler mysql
,我确信有足够的现成解决方案。并且不要在会话中存储密码等敏感信息,每次需要比较时都要更好地进行查询。
除此之外...使用ssl / https进行登录和用户管理,因此不会传输明文密码。在数据库中只存储带有salt的pw-hashes。不要让任何人看到密码(意思是:永远不要将它们打印到HTML或电子邮件中)。不要对用户可以看到的ids使用auto_increment值(因此猜测)。好的,那已经不在问题范围内了。
答案 1 :(得分:1)