PHP Cookie与会话变量

时间:2012-11-08 18:51:24

标签: php session cookies session-variables

我正在从php-login.net修改登录脚本并尝试使其更安全。此特定登录脚本具有一个登录类,用于在用户登录时设置cookie和会话变量。

/**
 *  write user data into PHP SESSION [a file on your server]
 */
   $_SESSION['user_name'] = $result_row->user_name;
   $_SESSION['user_email'] = $result_row->user_email;
   $_SESSION['user_logged_in'] = 1;

/**
 *  write user data into COOKIE [a file in user's browser]
 */
   setcookie("user_name", $result_row->user_name, time() + (3600*24*100));
   setcookie("user_email", $result_row->user_email, time() + (3600*24*100));
   $this->user_is_logged_in = true;

不幸的是,在用户获得访问权限的页面上,没有人写了一张支票,以确保用户在访问该页面时已登录。因此,如果一个人只是直接输入网址,他们就不必登录。

我想知道确认用户已登录的最佳方法。目前,我正在使用它,但我不知道它是否冗余(意思是:cookie变量总是等于会话变量,所以没有检查两者?)任何输入都会有所帮助。

session_start();
if(!(isset($_COOKIE['user_email']) && 
    isset($_SESSION['user_email']) &&
    ($_COOKIE['user_email']===$_SESSION['user_email']) &&
    isset($_COOKIE['user_name']) && 
    isset($_SESSION['user_name']) && 
    ($_COOKIE['user_name']===$_SESSION['user_name']) && 
    isset($login) && 
    $login->isUserLoggedIn())){
        header("location:../../index.php");
        exit;
     }

(抱歉格式不正确的代码,我仍然想弄清楚这个网站上文本格式的细微差别)

1 个答案:

答案 0 :(得分:2)

使用会话时,会出现一个会话ID的cookie,该会话ID映射到服务器端的php会话。您在那里注册的所有数据都将在全局$ _SESSION数组中提供。将数据存储在cookie以及服务器上通常都是没有意义的。

只有您将数据存储在cookie中的原因是,如果您在同一域名上有更多需要共享cookie数据的网站。