我正在使用核心PHP设计登录系统,请参阅以下代码 -
funciton login($username,$password) {
// mysql query to check the username and password
if($res == 1) {
session_start();
$_SESSION['username'] = $username;
$_SESSION['loggedin'] = 1;
return true;
}
}
正如您所看到的,我已经在登录功能中启动了会话,有人请告诉我它是正确的还是我在应用程序的每个页面上启动会话,即在公共头文件中?
答案 0 :(得分:0)
您应该尝试看到session_start()启动的“会话”与登录无关。在应用程序的每个脚本中开始会话作为您做的第一件事(如果您的应用程序需要任何会话管理,那就是)。
会话代表您网站上唯一身份访问者的“访问”。理论上,访问可以由连续的登录/注销对组成。它仍然是相同的访问,但只是一个不同的登录。
例如,如果您的网站上有“选择语言”下拉列表,则可能需要存储用户在会话中所做的选择。当用户注销时,您仍可能希望保留所选语言。有关用户登录与否的信息只是会话可以执行的一部分,因此会话应该独立于可能的登录而存在。
然后,您可以在该会话中存储“登录”标记和用户名,并在访问者注销后取消设置这两个值。
答案 1 :(得分:0)
session_start()
并不意味着“立即创建会话”,它意味着“如果存在则打开当前会话,或者如果不存在则创建”。
您可能希望销毁旧会话并在登录/注销操作上创建一个新会话(存在各种微妙的安全攻击,例如“会话劫持”和“会话固定”,这可能很难避免)。
但是您需要在每个页面上运行session_start()
,以便确定用户是否已经登录。如果不这样做,$_SESSION
将为空/未定义。