http和https之间的会话cookie与域和子域分开

时间:2014-01-04 13:19:37

标签: php session cookies

我将网站的面板部分更改为安全的SSL位置:“https://panel.domain.com”并将其配置为在DirectAdmin上的其他用户创建的单独域。这样做是出于安全原因,并且有可能在将来将面板移动到完全不同的服务器。

  1. DA上的网站http(普通网站)user1。
  2. DA上的
  3. 子域https(安全面板)user2。
  4. 出现的问题:当有人从http或https登录并转到安全login.php(https)并且在登录后返回到http时,您没有看到您已登录并且随附的选项,但您再次看到登录表单。我想通过会话cookie显示已登录的选项,例如概述和我在http上的信息。

    我用饼干等尝试过很多东西,但是我无法做到。如果我在浏览器中检查cookie,我看到panel.website.com和www.website.com都有不同的会话ID。这是我正在使用的最新代码。

    Login.php HTTPS页面

    <?php
    // regenerate session id to make session fixation more difficult
    session_regenerate_id(true);
    
    // generate random code for the authentication cookie and store it in the session
    $authCode = md5(uniqid(mt_rand(), true));
    $_SESSION['authentication'] = $authCode;
    
    // create authentication cookie, and restrict it to HTTPS pages
    setcookie('authentication', $authCode, 0, '/', '', true, true);
    ?>
    
    <form method="post" action="https://panel.website.com/login">
    <table>
    <tr>
    <td><input type="text" name="email" /></td>
    </tr>
    <tr>
    <td><input type="password" name="password"  /></td>
    </tr>
    <tr>
    <td><input type="submit" name="login" value="login" /></td>
    </tr>
    </table>
    </form>
    

    登录后使用登录表单和链接/选项的Index.php HTTP

    <?php
    // check that the authentication cookie exists, and that
    // it contains the same code which is stored in the session.
    $pageIsSecure = (!empty($_COOKIE['authentication']))
    && ($_COOKIE['authentication'] === $_SESSION['authentication']);
    
    if (!$pageIsSecure)
    {
    

    不显示页面,重定向到登录表单

    <form method="post" action="https://panel.website.com/login">
    <table>
    <tr>
    <td><input type="text" name="email" /></td>
    </tr>
    <tr>
    <td><input type="password" name="password"  /></td>
    </tr>
    <tr>
    <td><input type="submit" name="login" value="login" /></td>
    </tr>
    </table>
    </form>
    

    登录http

    后显示选项
    <?php }else{ ?> 
    
    <li><a href=" https://panel.website.com/overview">Overview</a></li>
    <li><a href=" https://panel.website.com/my-information">My Information</a></li>
    
    <?php } ?>
    

0 个答案:

没有答案