【问题标题】:Handling Session for PHP servlet with multiple PHPs处理具有多个 PHP 的 PHP servlet 的会话
【发布时间】:2015-11-30 23:13:41
【问题描述】:

我正在开发一个使用 PHP servlet 访问数据库的 android 游戏。它们是多个 PHP 文件。我的 android 应用程序向 PHP 文件询问存储在数据库中的数据。 我正在尝试为我的 PHP servlet 实现某种会话控制。 在 PHP 引用的用户登录(login.php)中,我添加了

session_start();
    // set time-out period (in seconds)
    $inactive = 1800;

    // check to see if $_SESSION["timeout"] is set
    if (isset($_SESSION["timeout"])) {
            // calculate the session's "time to live"
            $sessionTTL = time() - $_SESSION["timeout"];
            if ($sessionTTL > $inactive) {
            session_destroy();
            echo "fazer_login_novamente";
            }
    }   

    $_SESSION["timeout"] = time();
    while($row=mysql_fetch_assoc($result)){
        $json[]=$row;
    }

在用户成功登录之后。现在,在登录之后,应用程序通过连接到另一个 PHP 文件来请求存储在数据库中的单词。这个新的 php (words.php) 通过这个链接的 checkSession PHP 函数检查用户是否已经开始了一个会话,或者它是否是某种劫持之王:http://php.net/manual/pt_BR/function.session-regenerate-id.php

但似乎用户在连接到 words.php 时总是得到“没有会话开始”的异常。

我做错了什么?你能帮帮我吗?

编辑:这是 words.php 的链接:https://www.dropbox.com/s/23em2h3l3hj1via/login.php?dl=0

编辑:这是 login.php 的链接:https://www.dropbox.com/s/1hp6udivy8whvl8/words.php?dl=0

【问题讨论】:

  • 你能发布words.php吗?确保 session_start(); 也在该脚本中。
  • 我编辑了带有 PHP 链接的主题

标签: php android mysql session servlets


【解决方案1】:

也许,在 login.php 中添加一个类似

的变量
$_SESSION['session_set']=true;

然后,在 words.php 中,这样做:

session_start();
if(isset($_SESSION['session_set']) {
    //session set (by login.php)
}
else {
    //session not set (by login.php)
}

您必须知道,在每个 php 文件的开头您必须使用 session_start(); 来访问 $_SESSION 变量。

【讨论】:

  • 但 session_start() 不会重置会话 ID 或类似的东西?如果我把它放在我的每个 PHP 的开头(如 words.php),我将如何检查 id?
  • 不,session start 如果不存在则启动一个新的会话,但如果存在一个会话,它只会打开现有的一个
猜你喜欢
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 2011-07-03
相关资源
最近更新 更多