【问题标题】:Unable to access session variables from other scripts in php无法从 php 中的其他脚本访问会话变量
【发布时间】:2021-04-15 01:47:10
【问题描述】:

我有一个登录页面,根据数据库的值成功验证电子邮件和密码后,会创建 3 个会话变量。问题是我无法从其他脚本访问这 3 个会话变量,即使在尝试从其他脚本访问变量之前调用了 session_start()。在登录页面上,一开始也调用了 session__start(),我也可以在页面刷新时在同一个登录页面上打印这 3 个会话变量。

我的php版本是7.4,服务器是apache。我在 Windows 机器上。

【问题讨论】:

  • 在第 3 行显示 C:\xampp\htdocs\incBooks\2.php
  • @WiatroBosy 我添加了 var_dump($_SESSION);在登录页面中,结果是 "array(5) { ["LoginSenderToken"]=> string(97) "$argon2id$v=19$m=65536,t=4,p=1$Ty9HQlR6aFBXZ2xxTWVLOQ$R1zUlj5wbmkgZpgH8pj5JtqHSz/TgEcNc5NNHmGQoLA " ["randID1"]=> int(461) ["isLicenseExpired"]=> int(1) ["isEmail"]=> string(12) "eb@gmail.com" ["isUserID"]=> int( 10) } ";
  • @WiatroBosy var_dumpt($_SESSION);在 script2 上输出“array(0) { }”
  • var_dump(session_start());这是什么节目?
  • C:\xampp\htdocs\incBooks\2.php 在第 3 行,这是同一个 script2 文件。

标签: php session session-variables


【解决方案1】:

找到了解决办法。我注意到登录页面是通过 url 中的 localhost 打开的,而试图访问会话变量的 script2 正在通过 127.0.0.1 打开。 php中的session对域来说是唯一的,所以localhost和127.0.0.1区别对待。

【讨论】:

    【解决方案2】:

    这是您的代码,但已简化。运行,输入邮箱和密码,点击“登录”。用 F5 刷新页面几次

    <?php
        session_start(); 
        var_dump($_SESSION);
        $LoginSenderEMAIL = @filter_var($_POST['email'],FILTER_SANITIZE_EMAIL);
        $LoginSenderPASS = @filter_var($_POST['password'],FILTER_SANITIZE_STRING);
        
    
    
    
    
        if(isset($_SESSION['stest']) )
        {
            echo '<br/><b style="color:red;"> Session is OK.</b>';
        }
        else if(isset($LoginSenderEMAIL) && !empty($LoginSenderEMAIL) && isset($LoginSenderPASS) && !empty($LoginSenderPASS))
        {
    
            echo '<br/><b style="color:red;"> Form send. Session is OK</b>';
            $_SESSION['stest'] = 'testsesion';
        }
        else{ ?>
    
    <form method="post">
        <table style="padding-left: 50px; padding-right: 50px;">
            <tr>
                <td class="rightAlign fontSize22">
                    <label for="email"> Email: </label>
                </td>
                <td>
                    <input type="email" name="email" id="email" class="fontSize22">
                </td>
            </tr>
            <tr>
                <td class="rightAlign fontSize22">
                    <label for="password">Password: </label>
                </td>
                <td>
                    <input type="password" name="password" id="password" class="fontSize22">
                </td>
            </tr>
            <tr>
                <td>
                    <a href="forgotPassword.php"><input type="button" value="Forgot Password?" class="fontSize22" style="background-color: #FF4F5A; border: none; color: white;"></a>
                </td>
                <td>
                    <input type="submit" value="Login" class="fontSize22" style="width:100%; background-color: #FF4F5A; border: none; color: white;">
                </td>
            </tr>
        </table>
    </form>
        <?php } ?>
    

    【讨论】:

    • 结果是“Form send. Session is OK”。
    • 您看到会话数据了吗? stest' => 字符串'testsesion'
    最近更新 更多