我有 3 页:
- 索引.php
- 登录.php
- 显示.php
索引.php
使用 ngRoute 模块设置 AngularJS 来导航我的页面。
登录.php
默认加载并设置 PHP $_SESSION 变量。
显示.php
回显 $_SESSION 的内容。
我从登录导航到显示.php.php使用ngRoute的链接设置。
问题
display.php 无论我导航到它多少次,都不会显示 $_SESSION 变量。仅当我手动导航到页面(例如刷新页面或在浏览器中输入地址)时,它才会显示它们。
我知道 php 代码被执行,因为我可以将其他内容回显到屏幕上,它只是不访问 $_SESSION 变量。
这是为什么呢?
我想我可能会看到你的问题在哪里。您尝试在单页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]);
店内至会话.php
session_start($_GET['session_id']);
$key = $_GET['key'];
$value = $_GET['value'];
$_SESSION[$key] = $value;
在您的登录名中.php
$user = yourAuthMechanism($_GET['username'],$_GET['password']);
if($user) {
session_start();
echo json_decode(array('status' => 'success','sid' => session_id()));
}
else { ... error handling
在 Angular 中需要访问会话数据的任何位置:
$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
一般来说,不存在任何原因,为什么AngularJS应用程序,哪个请求 基于 PHP 的服务器端的东西,将无法读取 _SESSION 美元。
也就是说,请至少提供您的 AngularJS 代码的核心概念,以便我们提供更多详细信息。
另外,把这个放在display.php
<?
echo __FILE__
. '<br />' . date( DATE_RFC822 )
. '<br />' . var_dump( $_SESSION )
;
// intentionally skipped dangerous closing PHP-tag
现在运行你的AngularJS应用程序并告诉结果。
确保在读取 SESSION 变量之前启动会话。
<?php
session_start();
echo $_SESSION["user9"];
?>
认为你在寻找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.");
}
?>