【问题标题】:Unset session within echo causing issues在回声中取消设置会话导致问题
【发布时间】:2014-01-10 22:38:07
【问题描述】:

我收到以下错误,不知道为什么。我已经盯着这个太久了..

错误:

Parse error: syntax error, unexpected T_UNSET in blah/blah/blah

我的代码:

本质上,我试图让用户能够通过单击链接来清除会话。不确定我的语法哪里出错了......任何帮助将不胜感激!

注意:是的,我的代码在 php 块内

echo "<span><a href='" . unset($_SESSION['vertical']) . "'>clear "
 . $vertical . "</a></span>";

提前致谢!

【问题讨论】:

  • 这行不通——你需要调用一个指向 PHP 页面的链接来进行 unset。如果没有别的 - 在生成链接时调用unset,而不是在单击时调用。
  • @andrewsi 我相信按照您的建议调用另一个页面会中断用户体验。基本上,我使用会话变量来存储有助于过滤搜索结果的信息。如果访问者决定不再应用特定过滤器,我试图允许访问者终止该会话变量。我相信如果我链接到另一个页面,访问者将需要重新开始搜索并应用过滤器......
  • 看看 m_poorUser 的回答——在这种情况下,你需要使用 AJAX。

标签: php


【解决方案1】:

页面加载完成后,您无法调用 PHP 函数。 PHP 是一种服务器端技术,在服务器上运行,而不是在客户端计算机上运行。这意味着,如果不将详细信息发送到脚本,您将无法调用 PHP 函数。

如果您尝试在用户单击链接时触发 unset 函数,那么您可以创建一个指向取消设置 $_SESSION 变量的脚本的链接:

<span><a href='somepage.php?somevar=42'>foo</a></span>

当用户点击链接时,他们将被带到somepage.php。现在,您可以检查是否设置了somevar 键,然后在脚本中检查unset 会话:

<?php
session_start();

if (isset($_GET['somevar'])) {
    unset($_SESSION['vertical']);
}

如果您想在不刷新页面的情况下执行此操作,那么您可能需要查看AJAX

【讨论】:

    【解决方案2】:

    当您在会话中写入unset($_SESSION['x']) x 时将被删除。它将立即执行。您应该提供一个链接,指向一个可以取消设置的页面。

    如果您想清除同一页面中的会话变量,您需要对另一个代码为 unset($_SESSION['x']) 的页面进行 AJAX 调用。

    【讨论】:

    • 我希望它立即执行。我正在开发一个过滤系统,并希望用户能够随时删除他们的任何过滤器。如果我链接到另一个取消会话设置的 php 页面,他们当前的体验将被打断,我不希望......有什么想法吗?
    • @user2828701:见我回答的最后一部分。
    • 您不想立即执行它。您想在单击链接时执行它。当我立即说时,我的意思是当页面完成加载时,它将已经执行。如果您不想重新加载页面,则需要使用 Javascript。搜索“PHP AJAX 调用示例/教程”。有很多教程。
    【解决方案3】:

    你应该这样做:

    <a href="sessiondestroy.php">Clear " . $vertical . "</a>
    

    并在 clearsession.php 中写入:

    <?php
        session_start();
        unset($_SESSION['vertical']);
    ?>
    

    【讨论】:

      猜你喜欢
      • 2010-11-04
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 2015-10-22
      • 2017-01-06
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多