我知道,这个问题多次问过,但我找不到解决办法 .
我编写了一个php / JS脚本来从服务器获取数据并显示它们 .
我使用Ajax验证是否经过用户身份验证?我用下面的方法来做;
我的index.php:
>?php
...
...
$.post("data.php",{ req:'login',
username:$('#username').val(), //user enters given id
pass:$('#password').val(),
job:$('#job').val(),
rand:Math.random() } ,
function(data)
{
if (data == 'yes') // user is authenticated.
document.location='system.php';
}
...
...
// i am using a form to send collected data to data.php
?>
在data.php代码中是这样的:
>?php
session_start();
$link = mysql_connect("localhost", "user", "pass");
if (!$link) {
die("No connection : " . mysql_error());
}
mysql_select_db("database");
if ($_POST["req"] == "login"){
$user_id=($_POST["username"]);
$user_pass=($_POST["pass"]);
$user_job=($_POST["job"]);
// select proper table (related to his/her job) and control did user supplied correct password?
if( password is correct ){
$_SESSION["id"]=$_POST["username"];
// or $_SESSION["id"]=$user_id;
echo "yes";
}
else echo "no"; //Invalid Login
} else if ($_POST["req"] == "userinfo"){
...
...
...
} else
...
...
?>
系统工作正常,直到这里,我重定向到system.php,在system.php我想使用$ _SESSION变量来获取JavaScript中的loged用户名 .
我的system.php的一部分;
>?php
session_start();
if ((isset($_SESSION["id"]))||(!empty($_SESSION["id"]))) header("Location:index.php");
$userno = $_SESSION["id"];
if(isset($_GET["logout"]))
{
session_destroy();
$_SESSION["id"] = FALSE;
header("Location:index.php");
}
?>
...
...
...
>script type="text/javascript">
$.post("data.php",{ req:'userinfo',username:'>?php echo ($userno) ?>',rand:Math.random() } ,function(data){
// sure ?php is written corrctly in script ;)
//.... again get data from data.php and put results into page..
});
>/script>
这段代码在我的电脑(xampp)中正常工作,但在我的服务器上没有机会..
echo ($userno) outputs nothing.
我搜索了很多地方,我发现这是因为register_globals关闭了 . 我理解为什么会这样 .
但为什么我无法获得$ _SESSION ["id"]的值并将其分配给我的system.php中的$ userno
NOTE :我对许多其他请求使用相同的data.php文件,所有这些请求都依赖于用户名,但不同的条件会更改用于数据源的表,因此我无法在开始时获取信息 .
谢谢你...
注意:因为我找不到正确的方法来使用代码突出显示我把>?php用于启动php代码部分和>脚本用于JS代码部分..
4 回答
这很有意思,我知道为什么我之前没有控制)有一些错误说:会话已经发送...像错误
我发现一个论坛页面说:
有时问题是由 Include Unicode Signature (BOM) 属性引起的,然后我控制了我的编码类型,我看到它是带有BOM的Unicode(我使用没有BOM,但我不明白它是怎么发生的),当我转换没有bom问题解决了 .
这完全是我的错误(甚至是错误信息),感谢您的所有帮助 .
注册您的变量的简单易行的解决方案 .
我认为它应该是
$_SESSION
,而不是$_session
. 它是一个超全球化,它区分大小写 .你得到了什么?
检查服务器端
$userno
的内容: