【问题标题】:on $_GET set $_SESSION wont work在 $_GET 上设置 $_SESSION 将不起作用
【发布时间】:2012-02-26 12:28:47
【问题描述】:

我需要得到$_GET['id_item'] 的最后一个非空值

session_start();

if(!isset($_SESSION['id_item']) || $_SESSION['id_item']===''  || ( isset($_GET['id_item']) && !$_GET['id_item'] === '' )){
    $_SESSION['id_item'] = $_GET['id_item'];
}else{
   /*no need to update*/
}

echo $_SESSION['id_item']   /*   Allways in blank    :S   */

还有var_dump($_GET) 输出:

array(1) { ["id_item"]=> string(2) "50" } 

知道为什么$_SESSION 没有保存吗?

【问题讨论】:

  • var_dump($_SESSION);的结果是什么
  • 你也忘记了 ;在您提供的代码的最后一行。
  • 你能回显 $_GET['id_item'] 吗?看看它是否为空
  • @RobinVanPersithe var_dump 显示它不是空的

标签: php session get


【解决方案1】:

解决这个问题:

$_SESSION['id_item']==''$_SESSION['id_item']===''

或者你可以使用:

empty($_SESSION['id_item'])

【讨论】:

  • 我稍微编辑了这个问题。您的回答为第一个获取值起作用,但在下一个中,s_session 保持为空
【解决方案2】:

除非您希望(有效)ID 为0,否则您可以将!isset($_SESSION['id_item']) || $_SESSION['id_item']==='' 减少为empty($_SESSION['id_item'])!$_GET['id_item'] === '' 始终为 false,因为这会转换为 false === ''。您可能正在寻找$_GET['id_item'] !== ''。同样,如果0 不是有效值,您可以在此处选择!empty($_GET['id_item'])

也就是说,条件的整个!isset($_SESSION['id_item']) || $_SESSION['id_item']==='' 部分没有多大意义。第二部分“如果 _GET id_item 存在”对于条件的主体 ($_SESSION['id_item'] = $_GET['id_item'];) 起作用始终是必需的。所以你可以将你的条件减少到

<?php
if (!empty($_GET['id_item'])) {
    // import new id_item
    $_SESSION['id_item'] = $_GET['id_item'];
} elseif (!isset($_SESSION['id_item'])) {
    // make sure we don't run into an undefined array index notice
    $_SESSION['id_item'] = null;
}

var_dump($_SESSION['id_item]);

【讨论】:

    【解决方案3】:

    start_session 之前有没有输出任何东西。如果是这样,它将无法发送 cookie。这可能就是它不起作用的原因。

    【讨论】:

    • 它不是一个 cookie,它是一个会话变量!
    • 服务器向浏览器发送一个cookie,以便以后的页面知道在会话数据存储中查找哪个会话。请阅读htmlgoodies.com/beyond/php/article.php/3472581/… 来解释 cookie 和会话之间的关系。 PHPSESSID 是 cookie 的名称(通常)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 2016-02-02
    • 2017-01-13
    • 2013-10-28
    • 1970-01-01
    • 2012-11-09
    相关资源
    最近更新 更多