【问题标题】:Maintaining PHP Session Variables维护 PHP 会话变量
【发布时间】:2015-12-04 07:10:39
【问题描述】:

我想在登录后维护 3 个 $_Session 变量。我的登录模式提交到我的 index.php 页面,这似乎是我可以访问用户登录时设置的会话变量的唯一地方。如何将这些变量传递到用户访问的下一页?我知道我可以在表单中使用隐藏输入,但是如果使用菜单浏览网站怎么办?我想将用户会话变量存储在会话包含文件中,但是在将变量的值从页面传递到页面时遇到了同样的问题。

-迈克

【问题讨论】:

  • Session是一个全局变量,它持续一个会话,为什么要把变量从一个页面传递到另一个页面,使用$_SESSION变量访问它
  • 我想将它们传递到其他页面以维护用户登录凭据。

标签: php session


【解决方案1】:

文件a.php:

<?php
session_start();

$_SESSION['saveme'] = 'from file A';

?>

文件b.php:

<?php
session_start();

echo $_SESSION['saveme']; // if you visited a.php previously, you will see "from file A"
?>

在任何文件中设置会话变量使其在其他任何地方都可用。

【讨论】:

  • 我遇到了这个答案并执行了这个确切的解决方案,但我无法从文件 b.php 访问这些变量。我开始认为这可能是 php.ini 问题?
【解决方案2】:

您可以将值存储在一个页面上的会话中(如您所提到的那样,在您的情况下为索引),然后如果会话在该页面上开始,您可以稍后在任何页面上获取这些值。会话存储这些值直到同一个会话活动。

在会话中设置值的代码:

<?php
// Start the session
session_start();
?>
    <?php
    // Set session variables
    $_SESSION["xyz"] = "xyz";
    $_SESSION["abc"] = "abc";
    echo "Session variables are set.";
    ?>

获取会话值的代码:

<?php
// Echo session variables that were set on previous page
echo "value of xyz is " . $_SESSION["xyz"] . ".<br>";
echo "value of abc is " . $_SESSION["abc"] . ".";
?> 

【讨论】:

  • 我也遇到过这个答案,唯一的区别是变量设置在 if($_SERVER['REQUEST_METHOD'] == 'POST') 我开始思考这可能是一个 php.ini 问题?
  • 好吧,我认为,默认情况下,php ini 文件应该全部设置为使用会话,如果您将上述代码置于上述评论中提到的条件下,您面临什么问题..请分享您的代码或详细解释以更好地理解...
  • YPS,我更改了代码以反映下面 Hans 的示例。请在下面查看我的评论。谢谢。
【解决方案3】:

模态的形式

<form action="index.php" method="post">
Username <input type="text" name="username" />
Password <input type="password" name="password" />
</form> 

然后你在index.php 中捕获它

<?php
session_start();

if (isset($_POST['username']) && isset($_POST['password'])) {
    // Check if user exists and password matches

    $_SESSION['username'] = $_POST['username'];
    $_SESSION['logintime'] = time();
    $_SESSION['something'] = 'else';
}

在任何其他页面中,您可以使用类似的值

<?php
session_start();

if (isset($_SESSION['username'])) {
    echo 'Welcome ' . $_SESSION['username'];
}

【讨论】:

  • 汉斯,我已将我的代码更改为像您上面那样设置。一切正常,直到最后一个街区。当我通过主菜单(包含在包含中)移动到另一个页面时,我可以访问会话变量。我在最后一个块中设置了一个 else{echo "Session not set";} 我可以看到。另外值得注意的是,当我从第二页导航回索引时,变量消失了。
【解决方案4】:

所有提供答案的人都感谢您。这个被忽视的细节全都在我身上,虽然我已经离开开发游戏有一段时间了,但我应该知道得更好。

默认情况下,我的托管服务将所有文件权限设为只读/写...以访问我更改为读/写/执行的会话变量并且成功。

再次感谢!

【讨论】:

    猜你喜欢
    • 2011-05-20
    • 2013-06-02
    • 2013-06-24
    • 2012-03-08
    • 1970-01-01
    • 2018-10-22
    • 2017-12-03
    • 1970-01-01
    • 2015-03-17
    相关资源
    最近更新 更多