Php 在$\u上设置$\u会话无法工作

Php 在$\u上设置$\u会话无法工作,php,session,get,Php,Session,Get,我需要获取$\u get['id\u 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

我需要获取
$\u get['id\u 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\u dump($\u GET)
输出:

array(1) { ["id_item"]=> string(2) "50" } 
知道为什么未保存
$\u会话
吗?

修复此问题:

$\u会话['id\u item']==''
$\u会话['id\u item']==''

或者您可以使用:

empty($_SESSION['id_item'])

启动会话之前,您是否输出了任何内容。如果是这样,它将无法发送cookie。这可能就是它不起作用的原因。

除非您希望(有效)ID为
0
,否则您可以减少
!isset($_会话['id_item'])|$_会话['id_item']===''
空($_会话['id_item'])
)<代码>$_GET['id\u item']==''
始终为false,因为这将转换为
false==''
。您可能正在查找
$\u GET['id\u item']!=''。同样,如果
0
不是有效值,您可以选择
!空($\u GET['id\u item'])
此处

也就是说,整个
!isset($_SESSION['id_item'])|$_SESSION['id_item']==''
条件的一部分没有多大意义。第二部分“if _GetID_item present”(如果_GetID_item present)对于条件主体(会话['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]);

var\u转储($\u会话)的结果是什么你也忘记了;在您提供的代码的最后一行。您能回显$\u GET['id\u item']吗?看看它是空的还是空的not@RobinVanPersithevar_dump显示它不是空的,它不是cookie,它是会话var!服务器向浏览器发送cookie,以便将来的页面知道要在会话数据存储中查找哪个会话。Reade解释Cookie和会话之间的关系。PHPSESSID是cookie的名称(通常),我稍微编辑了一下这个问题。您的答案对第一个get值有效,但在下一个get值中,s_会话保持为空