8

我有 3 页:

  1. 索引.php
  2. 登录.php
  3. 显示.php

索引.php

使用 ngRoute 模块设置 AngularJS 来导航我的页面。

登录.php

默认加载并设置 PHP $_SESSION 变量。

显示.php

回显 $_SESSION 的内容。

我使用 ngRoute 的链接设置从 login.php 导航到 display.php。

问题

display.php 不显示 $_SESSION 变量,无论我导航多少次。只有当我手动导航到页面时,它才会显示它们,例如刷新页面或在浏览器中输入地址。

我知道 php 代码已执行,因为我可以将其他内容回显到屏幕上,它只是不访问 $_SESSION 变量。

为什么是这样?

4

4 回答 4

8

我想我可能会看到你的问题出在哪里。您尝试在单页 angularJS HTML 模板中访问 php 会话,对吗?喜欢:

<div ng-repeat="n in <?php $_SESSION['someSessionArray'] ?>">

这不是它的工作方式。您的 $_SESSION 将永远不会出现在您的模板中。您可以做的是使用 ajax 请求进行登录身份验证,并让该请求为您提供会话 ID。然后在进一步的 ajax 请求中启动会话时使用该会话 ID(如前所述)。

然后,当您想将某些内容存储到 php 会话时,通过 ajax 请求和 php 服务访问数据。

一个非常,非常,非常,简单的例子:在getFromSession.php里面

session_start($_GET['session_id']);
$key = $_GET['key']
echo json_encode($_SESSION[$key]);

在 storeToSession.php 里面

session_start($_GET['session_id']);
$key = $_GET['key'];
$value = $_GET['value'];
$_SESSION[$key] = $value;

在您的 login.php 中

$user = yourAuthMechanism($_GET['username'],$_GET['password']);
if($user) {
  session_start();
  echo json_decode(array('status' => 'success','sid' => session_id()));
}
else { ... error handling

在您需要访问会话数据的角度中的任何地方:

$promise = $http.get('pathtoyourphp/getFromSession.php?key=foo');
$http.set('pathtoyourphp/getFromSession.php?key=bar&value=4');
// now use promise to acces the data you got from your service
于 2014-03-12T14:25:50.603 回答
1

确保在读取 SESSION 变量之前启动会话。

<?php
    session_start();
    echo $_SESSION["user9"];
?>
于 2014-03-10T23:56:53.730 回答
1

一般来说,没有任何理由,为什么请求基于 PHP 的服务器端内容的 AngularJS 应用程序将无法读取 $_SESSION。

也就是说,请至少提供您的 AngularJS 代码的核心概念,以便我们提供更多详细信息。

此外,只需将其放入display.php

<?

echo __FILE__
   . '<br />' . date( DATE_RFC822 )
   . '<br />' . var_dump( $_SESSION )
   ;

// intentionally skipped dangerous closing PHP-tag

现在运行您的 AngularJS 应用程序并告诉结果。

于 2014-03-06T22:27:10.187 回答
0

我认为您不是在寻找 angularJS。我认为您正在寻找更多类似的东西。

索引.php:

<html>
    <header>
       <title>Login</title>
    </header>
    <body>
       <form method="POST" action="login.php">
           <input type="username" name="username" placeholder="username" />
           <input type="password" name="password" placeholder="password" />
           <input type="submit" value="Login" />
       </form>
    </body>
</html>

登录.php

<?php
   session_start();
   if(empty($_POST)) {
      die("You don't have permission to be here.");
   } elseif(empty($_POST['username']) or empty($_POST['password'])) {
      die("All fields are required.");
   }

   $username = "admin";
   $password = "password";

   if($_POST['password'] == $password && $_POST['username'] == $username) {
       $_SESSION['loggedIn'] == "true";
       header("Location: show.php");
   } else {
       die("Invalid login");
   }
?>

显示.php

 <?php
    if($_SESSION['loggedIn'] == "true") {
        echo "You are logged in";
    } else {
        die("You don't have permission to be here.");
    }
 ?>
于 2014-03-10T12:59:01.810 回答