从 JavaScript 访问会话变量

Posted

技术标签:

【中文标题】从 JavaScript 访问会话变量【英文标题】:Access session variables from JavaScript 【发布时间】:2011-12-29 20:39:28 【问题描述】:

是否可以访问由 javascript 生成的会话变量,以及如何在 JavaScript 中复制此 php 代码?

if(empty($_SESSION['name'] 
   echo 'foo';

【问题讨论】:

使用会话变量的要点是它们对客户端不可见... 有点可惜,能访问它们有什么缺点吗?? 如果可以从浏览器中任意检查他们的会话变量,那么如果存在真正应该隐藏而不是“foo”的数据,则可能会出现一些问题。 【参考方案1】:

你可以通过 Ajax 访问一个返回变量值的页面:

使用 jQuery:

$.get('myVariable.php', function ( data ) 
    alert(data)
);

还有PHP页面(myVariable.php):

<?php echo $_SESSION['user_id']; ?>

【讨论】:

【参考方案2】:

如果您将 javascript 设置为由 php 解析,则可以像在 php 中一样访问会话变量:

// Test.php
<?php session_start(); ?>

<?php $_SESSION['foo'] = 'bar' ?>

<script type="text/javascript">
    alert('<?php echo $_SESSION['foo'] ?>');
</scrip>

<?php var_dump($_SESSION['foo']) ?>

【讨论】:

【参考方案3】:

对不起,你不能:(

先来一点背景:

PHP 中的会话支持包括一种在后续访问中保留某些数据的方法。这使您能够构建更多定制的应用程序并增加您网站的吸引力。

访问您网站的访问者被分配一个唯一的 ID,即所谓的会话 ID。这要么存储在用户端的 cookie 中,要么在 URL 中传播。

会话支持允许您注册任意数量的变量以跨请求保留。当访问者访问您的站点时,PHP 将自动检查(如果 session.auto_start 设置为 1)或根据您的请求(显式通过 session_start() 或隐式通过 session_register())检查是否已随请求发送了特定会话 ID。如果是这种情况,则重新创建先前保存的环境。 来自http://www.php.net/manual/en/intro.session.php

基本上,会话涉及在服务器端存储数据并将 ID 存储在 cookie 客户端。这意味着 JS 理论上可以访问 cookie,但是您将只能访问 PHPSESSID 变量(会话 ID)。

要实现您想要做的事情,您可以使用 ajax。 (与流行的误解相反)ajax 请求仍然为服务器提供访问 cookie 和会话所需的所有信息。

所以只需制作一个像getName.php 这样的服务器端脚本,其中包含:

if(!empty($_SESSION['name'])) 
    echo $_SESSION['name'];

并使用 ajax 获取响应 :)

【讨论】:

或者按照 Digital Precision 的说法跳过 AJAX。【参考方案4】:

嗯...... ajax 很好,一切都很好,但如果你真的想要,你可以将它们作为变量打印在头部的标签中,然后通过 js 访问它们。我从来没有用会话变量这样做过,但我一直以这种方式从 php (mysql) 中打印出值

【讨论】:

我不会将它用于任何类型的安全/私人数据。客户端不能直接访问会话变量,但是如果您将它们发送到 javascript,然后使用那里的逻辑来验证人,您可能会遇到问题。 “伪造” javascript 变量非常容易,因此您不能指望它们 100% 准确【参考方案5】:

是否可以从 javascript 访问 php 中的会话变量

没有。它们驻留在您的 Web 服务器的内存中,幸运的是,javascript 无法访问。

【讨论】:

【参考方案6】:

会话变量存储在服务器上。使用 javascript(客户端)访问它们的唯一方法是使用 AJAX 向后端发出请求到 php 页面,然后将值返回给您。

【讨论】:

【参考方案7】:

不,你不能。会话变量存储在服务器中,而不是客户端中。您可以做的最接近的事情是在 php 脚本中验证会话变量并使用 ajax 调用它。

【讨论】:

以上是关于从 JavaScript 访问会话变量的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JQUERY 读取 SESSION 变量

从模块访问会话变量或控制器变量

javascript 从url(GET)检索会话变量和http查询字符串

在javascript中更新Django会话变量?

如何在 jinja 2 - Flask 中访问会话变量

在子目录中无法访问会话变量