【问题标题】:Using $_SESSION on PHP form在 PHP 表单上使用 $_SESSION
【发布时间】:2013-10-10 22:25:42
【问题描述】:

如何仅使用 $_SESSION(即不使用 $_COOKIE)显示保存在 'name' 和 'email 中的变量?

我创建了这个使用 $_COOKIE 工作的程序,但是(我知道)它的设计并不是很好。我只是在学习。但我正在尝试转换使用 $_SESSION 而不是 $_COOKIE 收集数据的表单。我所做的只是用 $_SESSION 替换了 $_COOKIE(少了 setcookie 等)。我的目标是,如果您点击“记住我”,它会记住您的“姓名”和“电子邮件”,这样您就可以在重新打开浏览器时直接点击“链接”下载内容。

<?php
session_start();
    // session
    if (isset($_POST['remember'])) {
$customer_name = $_SESSION['name'];
if (!($customer_name)) {
$customer_name = $_POST['name'];
}
$customer_email = $_SESSION['email'];
if (!($customer_email)) {
$customer_email = $_POST['email'];
}

//If Form submitted
//I.e. Email validation that will check if field is empty or doesn't 
//If there is no error
echo 'Here's the <a href="http://www.google.com/something">link.<br />';
//else there's error

<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
Name:
<?php
  if (isset($_SESSION['name'])) {
    echo $_SESSION['name']."<br />";
  }
else {
?> 
<input type="text" name="name" value="<?php echo $_POST['name']; ?>" size="25" /><br />
<?php } ?>

Email:
<?php
  if (isset($_SESSION['email'])) {
    echo $_SESSION['email']."<br /><br />";
  }
else {
?>  
<input type="text" name="email" value="<?php echo $_POST['email']; ?>" size="25"/> 
<input type="checkbox" name="remember" /> Remember me
<input type="submit" name="Submit" />
<?php } ?>


</form>

【问题讨论】:

  • 会话通常是临时的,cookie 允许您将过期日期设置为远在未来。
  • @Barmar $_SESSION 和 $_COOKIE 相同,只是客户端保存的数据是前者的“令牌”,但后者是正在收集的变量的实际内容(即 $_COOKIE[ 'name'] = "john" 保存在客户端浏览器上)。
  • 你说它们是一样的,然后解释它们的不同之处
  • 一段时间未使用的会话文件通常会被删除,但您可以配置需要多长时间。
  • 要求用户注册“姓名”和“电子邮件”。获取下载链接。如果他们选择被记住,那么他们点击“记住我”复选框。如果是这样,在重新打开浏览器时应该只吐出“John”“email@example.com”,然后是一个下载链接,无需重新注册。

标签: php forms session


【解决方案1】:

改为使用 cookie。例如,用电子邮件设置一个 cookie,它会被记住,直到 cookie 过期。如果您使用会话,它将取决于服务器配置,但通常较低(不到一天)。

无论如何,我在这里根本看不到任何问题:P

【讨论】:

  • 但是 cookie 是“记住我”的正确方法,会话不是
  • @Dagon 我试图使用我为 $_COOKIE 制作的概念将其转换为 $_SESSION 并且您可以让它以这种方式工作。两者的区别在于 $_SESSION 在客户端的浏览器上保存了一个令牌(其余的在服务器上),但 $_COOKIE 实际上保存了“内容”(即 John,email@email.com)。
  • 如果你能做到这一点,那就去吧,但我认为你并不真正理解其中的区别。
  • @Dagon 抱歉,这是我的问题,我不能,但你可以。我用谷歌搜索并在这里关闭但不是完全在我的代码上。
【解决方案2】:

试试这个:

if (isset($_POST['remember'])) {
    if (!isset($_SESSION['name'])) {
        $_SESSION['name'] = $_POST['name'];
    }
    if (!isset($_SESSION['email'])) {
        $_SESSION['email'] = $_POST['email'];
    }
    $customer_name = $_SESSION['name'];
    $customer_email = $_SESSION['email'];
    ...

在您的代码中,您设置了$customer_XXX,但从未设置$_SESSION['XXX']

【讨论】:

  • 这两个是错别字:$_SESSION['name'] = $customer_name; $_SESSION['email'] = $customer_email;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 2015-11-20
  • 2010-11-17
  • 2018-07-27
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
相关资源
最近更新 更多