【问题标题】:Post variables in session storage logs user out在会话存储中发布变量将用户注销
【发布时间】:2015-03-29 05:11:30
【问题描述】:

我的登录系统有问题,当人们登录并访问页面时,它运行良好,但是一旦他们进入我在第一行写有$_SESSION = $_POST; 的页面,用户就会自动注销。

我在登录系统上设置了 cookie 过期时间,但由于某种原因,用户在访问该特定站点时会被注销。我删除了该代码,然后它工作正常。

有什么想法吗?


编辑: 我正在使用 php 登录高级系统,http://www.php-login.net/。这不是阅读代码所必需的,因为这是会话和帖子的问题。所以我只是想知道问题可能是什么。

【问题讨论】:

  • 不清楚你在问什么;显示实际代码。
  • 如果您将登录状态存储在会话中,然后执行$_SESSION = $_POST; 会覆盖会话中的所有内容。
  • 如何让它不覆盖它并且仍然能够使用 $_SESSION = $_POST.因为我想使用标题位置将 POST 转移到另一个页面。所以这就是我的想法。 @AbraCadaver
  • 我以前用过那个系统,完全没有问题。在您打开<?php 标签error_reporting(E_ALL); ini_set('display_errors', 1); 后立即将错误报告添加到文件顶部,看看它是否产生任何结果。你有足够的调试时间。
  • $_REQUEST 具有发布数据和 cookie,所以也许这就是您想要将 $_SESSION 设置为的值?

标签: php session


【解决方案1】:

使用

$_SESSION['post'] = $_POST;

以便您将发布数据存储在 $_SESSION 的子部分中。现在,您正在彻底清除整个会话并用 POST 数据替换其中的任何内容。

【讨论】:

  • 如何阅读我的第二个网站上的帖子,例如 $_POST['username']。
  • 它只是一个数组。 $_SESSION['post']['postfieldthatyouwant'].
  • 谢谢我对 PHP 很陌生,这帮助我解决了我的问题。我将来会考虑这个解决方案。接受了。
【解决方案2】:

如果您想将每个单独的字段从 $_POST 复制到 $_SESSION,您可以使用以下内容:

foreach ($_POST as $key => $value)
{
    $_SESSION[$key] = $value;
}

【讨论】:

  • 这很危险,因为您不知道这些字段是什么。它们可能与他用于登录的字段发生冲突。你想把它放在一个子键中。
  • 我并不是说这是最好的解决方案,但这是他要问的。
  • 这就是为什么 Marc 的解决方案更好。如果您添加子键,则类似于您的: foreach ($_POST as $key => $value) { $_SESSION['post'][$key] = $value; }
  • 并不是说他不是两个选择中更好的。
【解决方案3】:
$_SESSION = array array_merge ( $_SESSION , $_POST );

如果你真的需要它http://php.net/manual/en/function.array-merge.php

但是Why does this `$_SESSION = $_POST` fail?

$_SESSION = $_POST;

无论如何都是个坏主意,$_POST 不保存!

【讨论】:

    猜你喜欢
    • 2011-06-26
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    相关资源
    最近更新 更多