【发布时间】:2012-06-03 02:22:29
【问题描述】:
我正在尝试使用 jQuery 和 PHP 实现和身份验证系统。所有的 php 工作都是在控制器和数据处理程序类中完成的。 .html 文件中没有 php 代码,.html 文件中的所有值都是通过 jQuery 呈现的,该 jQuery 从 php 服务器请求数据。所以我想做的是:
- 当用户单击登录按钮时,jQuery 会调用我的控制器类中的 authenticate() 方法,它会检查用户是否正确,如果正确,则启动会话并将 user_id 设置为session 以便我稍后可以访问它,并将 userId 再次返回给 jQuery 客户端。
- 之后,如果一切正常,在 jQuery 中我将其重定向到 html 文件。在 html 文件中,我从
<script>标记调用一个 jQuery,它将处理其他权限。但是这个 jQuery 会访问 getPermissionString 方法(来自前面提到的authenticate()方法的同一类),它需要获取在 authenticate 方法中设置的会话值。
问题:
当我尝试在getPermissionString() 中获取会话值时,它会说:
注意:未定义的变量:_SESSION
我尝试检查会话是否在第二种方法中注册,但看起来不是。这是我的 PHP 代码。
有什么想法吗?谢谢。
public function authenticate($login, $password)
{
$result = $this->userDataHandler->authenticateUser($login, $password);
if(is_numeric($result) && $result != 0)
{
session_start();
$_SESSION["uid"] = $result;
if(isset($_SESSION["uid"]))
{
echo "registered";
$userId = $_SESSION["uid"];
}
else
{
echo "not registered";
}
echo $result;
}
else
{
echo 0;
}
}
public function getPermissionString()
{
if(isset($_SESSION["uid"]))
{
echo "registered";
$userId = $_SESSION["uid"];
}
else
{
echo "not registered";
}
}
【问题讨论】:
-
$_SESSION是未定义的,除非会话已经开始。开始会话,你就没事了。 -
@hakre 但正如你所见,我正在启动它。
-
您是否尝试过将 session_start() 放在函数之外?可能是 jquery 调用的页面顶部?
-
回到学校,重新阅读 PHP 中的会话:php.net/sessions
-
@rogcg:你知道吗,有一个 阿波罗任务登陆月球。但在那次任务之后,还有其他人没有。美国宇航局并没有试图告诉每个人他们总是设法去那里只是因为他们做了一次。这与您的会话类似。只是因为您的代码中某处有一些
session_start,这并不意味着会话已启动。
标签: php jquery session session-variables session-cookies