AngularJS ngRoute and PHP $_SESSION variables


http://stackoverflow.com/questions/22085068/angularjs-ngroute-and-php-session-variables


I think i might see where your problem is. You try to access php session in your single page angularJS HTML templates am i right? like:

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

That is not how it works. Your $_SESSION will never be available in your templates.What you can do, is use an ajax request for your login authentication and have that request give you a session id. Then use that session id when starting your session in further ajax requests (as already mentioned).

Then, when you want to store something to the php session, access the data via ajax request and php service.

a VERY, VERY, VERY, simple Example:inside getFromSession.php

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

inside storeToSession.php

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

inside your login.php

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

inside anywhere in your angular where you need to access session data:

$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

+++++++++++++++++++++++++


I don't think you're looking for angularJS.I think you're looking for something more like this.

index.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>

login.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");
   }
?>

show.php

 <?php
    if($_SESSION['loggedIn'] == "true") {
        echo "You are logged in";
    } else {
        die("You don't have permission to be here.");
    }
 ?>

### 关于 Navicat 中 `performance_schema.session_variables` 表的相关信息 #### 错误背景 当使用 Navicat 连接到 MySQL 数据库时,如果遇到错误提示 “1146 - Table ‘performance_schema.session_variables’ doesn’t exist”,通常是因为该表不存在或未被正确初始化。此问题可能源于 MySQL 版本升级过程中某些元数据表未能同步更新[^3]。 #### `performance_schema.session_variables` 表的作用 `performance_schema.session_variables` 是 MySQL 性能监控子系统的一部分,用于存储当前会话级别的变量状态。它记录了每个线程(session)的系统变量值,帮助管理员分析不同会话下的配置差异以及性能调优所需的信息[^2]。 | 字段名 | 类型 | 描述 | |-------------------|--------------|----------------------------------------------------------------------| | VARIABLE_NAME | VARCHAR(64) | 变量名称 | | VARIABLE_VALUE | VARCHAR(1024)| 当前会话下对应的变量值 | 注意:上述字段定义基于标准实现,具体版本可能存在细微差别。若表缺失,则需重新构建或修复环境。 --- #### 如何解决表丢失的问题? 以下是几种常见解决方案: 1. **确认权限** 确保登录账户具有足够的权限访问 `performance_schema` 下的所有对象。可以通过以下 SQL 查询验证: ```sql SHOW GRANTS FOR 'your_user'@'host'; ``` 2. **运行升级工具** 如果是从较低版本(如 5.6)迁移到较高版本(如 5.7),建议执行官方提供的升级脚本来重建必要的元数据表: 打开命令行并切换至 MySQL 安装目录中的 bin 文件夹,随后运行以下指令: ```bash mysql_upgrade -u root -p --force ``` 输入密码后等待完成即可[^5]。 3. **手动创建表** 若以上方法不可用,可尝试从其他正常实例导出对应 DDL 并导入目标服务器中。例如: ```sql CREATE TABLE IF NOT EXISTS performance_schema.session_variables ( VARIABLE_NAME VARCHAR(64), VARIABLE_VALUE VARCHAR(1024) ) ENGINE=PERFORMANCE_SCHEMA; ``` 4. **重启服务** 部分情况下仅需停止再启动 MySQL 服务便可恢复异常状况: ```bash net stop MySQL net start MySQL ``` --- #### 测试连接成功后的操作 一旦解决了表缺失问题,在 Navicat 中可以正常使用如下功能: - 查看实时 session 参数设置; - 对比多线程间的行为特征; - 导入/导出涉及此类敏感数据的内容而无需担心报错中断流程等问题发生。 ```sql SELECT * FROM performance_schema.session_variables WHERE VARIABLE_NAME LIKE '%timeout%'; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值