如何设置会话及时性?

时间:2014-04-24 16:08:22

标签: php session-cookies session-timeout

在我的项目中,我需要设置不同的方式来设置会话时间 - 实时: 1)如果用户设置了“记住我”#39; - >信息写入cookie - >如果cookie变量可用则设置会话time-live non set(尽可能长)。当用户从cookie重新加载页面信息写入会话变量时。如果用户关闭浏览器,则再次打开浏览器并加载网站 - >来自cookie重启会话的信息(如果cookie信息可用)。 2)如果用户没有设置“记住我'会话必须从24我们(1天)到期。

session_set_cookie_params(3600);
session_start(); 
include ("blocks/bd.php");

if (isset($_COOKIE['passwordCode'])) {
    $passwordCode = $_COOKIE['passwordCode'];
    $login = $_COOKIE['login'];
    $personalInfo = mysql_query("SELECT * FROM users WHERE password='$passwordCode' AND login='$login'", $db);
    $personalInfoData =  mysql_fetch_array($personalInfo);      

    $_SESSION['password'] = $personalInfoData['password'];
    $_SESSION['login'] = $personalInfoData['login'];
    $_SESSION['userName'] = $personalInfoData['userName'];
    $_SESSION['phone'] = $personalInfoData['phone'];
    $_SESSION['email'] = $personalInfoData['email'];
    $_SESSION['id'] = $personalInfoData['id'];
    $_SESSION['role'] = $personalInfoData['role'];
    $_SESSION['companyRelation'] = $personalInfoData['companyRelation'];
}
if (isset($_SESSION['login']) && isset($_SESSION['password'])) {
    $personalInfo = mysql_query("SELECT * FROM users WHERE password='$_SESSION[password]' AND login='$_SESSION[login]'", $db);
    $personalInfoData =  mysql_fetch_array($personalInfo);


}

使用此代码会话设置时间不能正常工作。

2 个答案:

答案 0 :(得分:0)

我不完全确定第一个选项(1)意味着什么,但是“记住我”会话在24小时后到期:

您可以设置所需的会话(假设为$_SESSION['username']),此外还设置一个会话,指定创建时间。让我演示一下:

if (isset($_SESSION['expire'])) {
  unset($_SESSION['expire']);
}
$_SESSION['username'] = $username;
$_SESSION['expire'] = time();

如果您想验证会话是否有效,可以使用:

if ($_SESSION['expire']+86400 < time()) {
  unset($_SESSION['username']);
  unset($_SESSION['expire']);
}

答案 1 :(得分:0)

首先:

切勿将密码存储在会话或cookie中!这是非常非常糟糕的做法,使你的脚本非常脆弱。

其次:

切勿将密码以明文形式存储在任何地方。加盐,哈希,然后存储。

每个用户密码都是有价值的;这样对待它。它不仅代表您访问您的脚本,还可能访问其电子邮件和其他网站。我知道我在很多地方都使用相同的密码,而且我也知道很多其他人也这么做。

您可以在网上的不同位置详细了解此信息,例如http://phpsec.org/projects/guide/1.html

现在,根据实际答案......

捕获最后一次行动

您没有指定会话是应该从用户登录的时间开始还是从用户上次执行操作的时间开始,但我会假设后者。

当用户登录时,将用户超时首选项保存在cookie中。然后,在每个页面上,将当前时间戳保存到cookie中。我们可以使用此cookie来检查自上一页重新加载以来经过了多长时间。

接下来,我们检查用户超时设置。如果它是&#34;记住我&#34;,我们只是让会话继续。如果它是&#34;不记得我&#34;,我们检查用户上次何时采取行动。将其与当前时间进行比较,看看是否已经过了24小时。如果有,请杀死会话。