0

我知道,这个问题问了很多次,但我找不到解决方案。
我编写了一个 php/JS 脚本来从服务器获取数据并显示它们。
我正在使用 Ajax 来验证用户是否经过身份验证?我正在使用以下方法来做到这一点;
我的 index.php:

>?php
...
...
$.post("data.php",{ req:'登录',
username:$('#username').val(), //用户输入给定的id
pass:$('#password').val(),
工作:$('#job').val(),
rand:Math.random() } ,
功能(数据)
{
if (data == 'yes') // 用户已通过身份验证。
document.location='system.php';
}
...
...
// 我正在使用表单将收集到的数据发送到 data.php
?>

data.php 中的代码是这样的:

>?php
session_start();
$link = mysql_connect("localhost", "user", "pass");
如果(!$链接){
    die("没有连接:" .mysql_error());
}
    mysql_select_db("数据库");

if ($_POST["req"] == "login"){
    $user_id=($_POST["用户名"]);
    $user_pass=($_POST["pass"]);
    $user_job=($_POST["job"]);

    // 选择合适的表(与他/她的工作相关)并控制用户是否提供了正确的密码?

    if(密码正确){
    $_SESSION["id"]=$_POST["username"];
    // 或 $_SESSION["id"]=$user_id;
    回声“是”;
    }
    否则回显“否”;//登录无效
} else if ($_POST["req"] == "userinfo"){
...
...
...
} 别的
...
...
?>

系统工作正常,直到这里我重定向到 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["注销"]))
{
    session_destroy();
    $_SESSION["id"] = 假;
    header("位置:index.php");
}
?>
...
...
...
>脚本类型=“文本/javascript”>
$.post("data.php",{ req:'userinfo',username:'>?php echo ($userno) ?>',rand:Math.random() } ,function(data){
// 确定 ?php 在脚本中是正确编写的 ;)
//.. 再次从 data.php 获取数据并将结果放入页面..
});
>>脚本>

此代码在我的 PC (xampp) 中正常工作,但在我的服务器上没有机会..
echo ($userno) 不输出任何内容。
我搜索了很多地方,发现这是因为 register_globals 已关闭。我明白为什么会这样了。
但是为什么我无法获取 $_SESSION["id"] 的值并将其分配给我的 system.php 中的 $userno
注意:我对许多其他请求使用相同的 data.php 文件,所有这些请求都取决于用户名但是不同的条件会改变用于数据源的表,所以我一开始就无法获取信息。
现在谢谢...
注意:由于我找不到使用代码突出显示的正确方法,我将 >?php 用于启动 php 代码部分和 >script 用于 JS 代码部分..

4

4 回答 4

0

我认为应该是$_SESSION,不是$_session。这是一个超全局的,并且区分大小写。

于 2011-10-21T01:42:39.290 回答
0
echo '<pre>';
print_r($_SESSION);
die;

你得到了什么?

检查$userno服务器端的内容:

$userno = $_session["id"];
var_dump($userno);
die;
于 2011-10-21T01:54:26.887 回答
0

注册变量的简单解决方案。

foreach ($_POST as $key => $value) {
 eval("$".$key."= '".$value."';");
}
于 2014-08-18T21:17:41.553 回答
0

很有趣,我在我的服务器上控制了error.log文件(我不知道为什么我以前没有控制)有一些错误说:会话已经发送... 类似错误
,我找到了一个论坛页面显示:
有时问题是由包含 Unicode 签名 (BOM)属性引起的,然后我控制了我的编码类型,我看到它是带有 BOM 的 Unicode(我正在使用没有 BOM,但我不明白它是如何发生的) ,当我在没有 bom的情况下进行转换时,问题就解决了。

这完全是我的错误(甚至是错误信息)感谢您的所有帮助。

于 2011-10-21T17:03:09.460 回答