【发布时间】:2017-04-13 01:11:53
【问题描述】:
我正在尝试使用 PHP 存储会话。但是当我尝试存储新的会话值时,存储后我无法获得上一个会话值。这是我的代码:
id=17;
var url="common.php?action=savecid";
$.post(url,{"cat_data":id},function(data){
var obj=JSON.parse(data);
console.log('catdata',obj);
})
这里我试图将 cat_data 存储到会话中,下面给出了 php 代码。
if($action=='savecid'){
$id=$_POST['cat_data'];
session_start();
//if(isset($_SESSION['cid']) && !empty($_SESSION['cid'])){
if(array_key_exists('cid',$_SESSION) && !empty($_SESSION['cid'])) {
//unset($_SESSION['cid']);
session_unset('cid');
$_SESSION['cid']=$id;
$flag="true";
}else{
$_SESSION['cid']=$id;
$flag="false";
}
$result=array("isData"=>1,"cid"=>$_SESSION['cid'],"flag"=>$flag);
echo json_encode($result);
}
上面的控制台输出为{ isData: 1, cid: Array[4], cat_id: "17" }。在这里我可以存储值并获取。下面给出了我的第二个 Ajax 调用。
sid=20
var url="common.php?action=setsubcatid";
$.post(url,{"subcat_data":sid},function(data){
var obj=JSON.parse(data);
console.log('subdata11',obj);
})
在这里,我尝试使用下面的 php 代码使用不同的键存储另一个 id。
if($action=='setsubcatid'){
$id=$_POST['subcat_data'];
$cat_id=$_SESSION['cid'];
session_start();
if(array_key_exists('subcat_id',$_SESSION) && !empty($_SESSION['subcat_id'])) {
//unset($_SESSION['cid']);
session_unset('subcat_id');
$_SESSION['subcat_id']=$id;
$flag="true";
}else{
$_SESSION['subcat_id']=$id;
$flag="false";
}
$result=array("isData"=>1,"subcat_id"=>$_SESSION['subcat_id'],"flag"=>$flag,'cat_id'=>$cat_id);
echo json_encode($result);
}
这里我也试图返回以前存储的 id (i.e-$_SESSION['cid']),但在相应的控制台中我得到了这个subdata11 Object { isData: 1, subcat_id: "20", flag: "true", cat_id: null }。在这里,我无法获得之前存储的 $_SESSION['cid'] 值。我需要在会话没有被破坏之前我应该得到所有的会话键值。
【问题讨论】:
-
您是否尝试过使用命名会话?
session_name('mySession')在session_start()之前。我记得有这样简单的事情可以让它工作,但我现在不确定,因为这次不工作。 -
@TypedSource : 不,我不使用
session_name('mySession')。你能分享你的想法吗。 -
session_unset 不会通过键取消设置,它会取消设置所有会话变量,请阅读文档php.net/manual/en/function.session-unset.php
-
@Mr_KoKa :如何取消设置单个键值。
-
@satya 取消设置单个会话密钥操作会话数组:
unset($_SESSION['myKeyToRemove']);