我知道,这个问题多次问过,但我找不到解决办法
我编写了一个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中的用户名。
我的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)什么都不输出。
我搜索了很多地方,我发现这是因为register_globals已关闭。我理解为什么会这样。
但为什么我无法获得$ _SESSION [“id”]的值并将其分配给我的system.php中的$ userno
注意:我对许多其他请求使用相同的data.php文件,所有这些请求都依赖于用户名,但不同的条件会更改用于数据源的表,因此我无法获取信息。 begining。
现在谢谢...
注意:因为我找不到正确的方法来使用代码突出显示我把>?php用于启动php代码部分和>脚本用于JS代码部分..
答案 0 :(得分:0)
我认为它应该是$_SESSION
,而不是$_session
。它是一个超全球化,它区分大小写。
答案 1 :(得分:0)
echo '<pre>';
print_r($_SESSION);
die;
你得到了什么?
检查服务器端$userno
的内容:
$userno = $_session["id"];
var_dump($userno);
die;
答案 2 :(得分:0)
非常有趣,我已经在我的服务器上控制了error.log文件(我不知道为什么我之前没有控制)有一些错误说:会话已经发送...像错误
我找到了一个论坛页面,上面写着:
有时问题是由包含Unicode签名(BOM)属性引起的,然后我控制了我的编码类型,我看到它是带有BOM的 Unicode (我使用没有BOM但是我不明白它是怎么发生的,当我转换没有bom 时,问题就解决了。
这完全是我的错误(甚至是错误信息),感谢您的所有帮助。
答案 3 :(得分:0)
注册您的变量的简单易行的解决方案。
foreach ($_POST as $key => $value) {
eval("$".$key."= '".$value."';");
}