我有一个登录页面,可以在成功登录后设置会话变量。登录页面然后重定向到管理页面。管理页面能够很好地读取会话变量。但是当我执行一个jQuery load()函数来加载内容div中的viewUsers.php时,会话变量就消失了。奇怪的部分是会话ID是相同的。
我在admin页面和viewUsers页面上都使用了var_dump()。管理页面显示登录页面中的所有适当变量,但使用$ _SESSION的jQuery load()函数var_dump调用的viewUsers页面为空。 $ _COOKIE ['PHPSESSID']的var_dump虽然有正确的ID,但对我没有任何意义。
这是我设置会话变量的方式。
$_SESSION['userID'] = $userInfo['ID'];
$_SESSION['userType'] = $userInfo['userType'];
$_SESSION['programID'] = $userInfo['programID'];
这是jQuery
$("#content").load("viewUsers.php");
所有页面都在最顶层有session_start()。当我尝试使用window.open和window.location而不是jQuery load()函数时,会话变量也不起作用。
即使我有正确的会话ID,会话变量如何丢失。如果有人能对此有所了解,我会非常感激!
截至目前,我正在填充隐藏字段并使用post函数而不是load来绕过它。我知道这不是最好的方法,但这是我弄清楚如何做的唯一方法。
修改 这是读取会话变量的索引的顶部。
<?php
session_start();
//require("session.php");
if(!isset($_SESSION['userID'])){
header("location: ../login/index.php");
}
?>
以下是整个viewusers
<?php
session_start();
//foreach($_POST as $name => $value){
//$_SESSION[$name] = $value;
//}
//echo " session id " . $_COOKIE['PHPSESSID'];
var_dump($_COOKIE);
var_dump($_SESSION);
?>
<?php require("adminFunctions.php"); ?>
<h2>View Current Users</h2>
<?php require("userlinks.php"); ?>
<table id="userTable" class="tablesorter">
<?php getUsers($_SESSION['programID'], $_SESSION['userType']) ?>
</table>
<script type="text/javascript">
$('td[name="userID"]').hide();
//$("#userTable th").click(function(){
//color();
//colorTable();
//color();
//});
function colorTable(){
$("tr:odd").css("background-color", "#c0c0c0");
$("tr:even").css("background-color", "#ffffff");
}
function color(){
$("tr:odd").css("background-color", "#ffffff");
$("tr:even").css("background-color", "#ffffff");
}
$(document).ready(function(){
//colorTable();
$("#userTable").tablesorter({widgets: ['zebra']});
});
</script>
另一个编辑: 这是加载viewusers的javascript代码 我使用post的唯一原因是因为我将会话变量设置为隐藏字段以传递会话变量。在viewusers上,我使用foreach循环来设置会话变量。我明白这不安全。 function maintainUsers(){
$.post("viewUsers.php", $("#sessionform").serialize(),function(data){
//alert(data);
$("#content").load("viewUsers.php");
});
}
答案 0 :(得分:1)
可能是一个很长的镜头,但你使用任何框架或cms?我知道wordpress会删除会话变量(http://blog.ginchen.de/en/2008/08/15/session-variablen-in-wordpress/)你能显示你用来加载viewUsers的javascript代码吗?你在本地服务器上编程吗?
答案 1 :(得分:1)
如果你有正确的 $ _ COOKIE ['PHPSESSID'] ,请尝试在 session_start()之前添加 session_id()分配:
<?php
/** Add this: **/
if (isset($_COOKIE['PHPSESSID']))
session_id($_COOKIE['PHPSESSID']);
/** Start session **/
session_start();
/** Rest of the script... **/
if(!isset($_SESSION['userID'])){
header("location: ../login/index.php");
}
?>
我一直使用这个,并且在PHP中的会话没有问题。
答案 2 :(得分:1)
我怀疑会话没有开始。我过去曾遇到过类似的问题,发现会议首先没有开始。
一个问题:您是否尝试在会话变量中打印出值以确保它存在? :
在调用页面之前 并在调用页面后。
答案 3 :(得分:0)
通常,当您不使用session_start()
读取会话数据时会发生此类错误。
尝试放置(虽然,你说你有,但我会建议重新检查)
session_start();
在viewUsers.php
如果不是上述情况,那么您当前的页面(执行.load()
功能的那个)正在重置会话并篡改这些值。除非你上传代码或找到它,否则没有解决方案。
答案 4 :(得分:0)
你在php open标签之前有一些空格。他们将输出发送到浏览器,因此会话无法启动。
答案 5 :(得分:0)
我会建议一些简单的事情。 将其包含在每个文件中。
<?php
session_name("yourapplication_session");
session_start();
?>