声明session_start()函数?

时间:2014-02-16 18:38:29

标签: php

我正在使用核心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;

}

}

正如您所看到的,我已经在登录功能中启动了会话,有人请告诉我它是正确的还是我在应用程序的每个页面上启动会话,即在公共头文件中?

2 个答案:

答案 0 :(得分:0)

您应该尝试看到session_start()启动的“会话”与登录无关。在应用程序的每个脚本中开始会话作为您做的第一件事(如果您的应用程序需要任何会话管理,那就是)。

会话代表您网站上唯一身份访问者的“访问”。理论上,访问可以由连续的登录/注销对组成。它仍然是相同的访问,但只是一个不同的登录。

例如,如果您的网站上有“选择语言”下拉列表,则可能需要存储用户在会话中所做的选择。当用户注销时,您仍可能希望保留所选语言。有关用户登录与否的信息只是会话可以执行的一部分,因此会话应该独立于可能的登录而存在。

然后,您可以在该会话中存储“登录”标记和用户名,并在访问者注销后取消设置这两个值。

答案 1 :(得分:0)

session_start()并不意味着“立即创建会话”,它意味着“如果存在则打开当前会话,或者如果不存在则创建”。

您可能希望销毁旧会话并在登录/注销操作上创建一个新会话(存在各种微妙的安全攻击,例如“会话劫持”和“会话固定”,这可能很难避免)。

但是您需要在每个页面上运行session_start(),以便确定用户是否已经登录。如果不这样做,$_SESSION将为空/未定义。