从 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 访问会话变量的主要内容,如果未能解决你的问题,请参考以下文章