如何使用 Ajax 函数从 php 服务器获取会话变量? (PHP HTML JS Ajax)
Posted
技术标签:
【中文标题】如何使用 Ajax 函数从 php 服务器获取会话变量? (PHP HTML JS Ajax)【英文标题】:How to get session variables from php server with Ajax function? (PHP HTML JS Ajax) 【发布时间】:2011-02-15 10:46:40 【问题描述】:所以在我的 php 中我有这样的东西
$_SESSION['opened'] = true;
但在用户对其他 html\php 页面执行某些操作之前,它不会设置为 true
所以我需要一些 Ajax 函数来获取这个会话变量。以及一些 PHP 函数示例,用于获取表单中的变量,以便 Ajax 获取它。
所以我需要一些东西来 AJAX 请求一个动作(一些简单的 php 代码),它将从 $_SESSION
返回一个值。
这样的事情怎么办?
【问题讨论】:
【参考方案1】:简单的jQuery 例子:
var session;
$.ajaxSetup(cache: false)
$.get('getsession.php', function (data)
session = data;
);
还有getsession.php
:
<?php
session_start();
print json_encode($_SESSION);
您不是必需将 jQuery 用于 AJAX,但我强烈推荐它。
编辑:
回应:
我希望能够告诉我的 JS 函数我想要获取什么变量。
你可以试试这个(未经测试):
var session;
$.ajaxSetup(cache: false)
$.get('getsession.php', requested: 'foo', function (data)
session = data;
);
还有 PHP:
<?php
session_start();
if (isset($_GET['requested']))
// return requested value
print $_SESSION[$_GET['requested']];
else
// nothing requested, so return all values
print json_encode($_SESSION);
查看$.get 文档以获得更详细的概述。
【讨论】:
是的!我喜欢它,但是如何获取特定的会话变量?我的意思是我希望能够获得特定的会话变量 - 不是全部。我希望能够告诉我的 JS 函数我想要获取什么变量。 只需将变量名作为请求参数传递,以便 PHP 知道返回什么? $.get() 将缓存结果,这对会话不利。看我的回答。 @Ole 查看我更新的答案以请求特定变量。我还更新了代码,这样您就可以使用方便的$.get
语法而不必担心它的缓存。
像“getsession.php”这样的文件不会是一个大的安全问题吗?您可以轻松阅读整个会话,并且其中可能存储了一些敏感数据【参考方案2】:
http://my.host/response.php 的 PHP 文件
<?php
session_start();
if(isset($_SESSION['opened']))
echo "true";
?>
然后在HTML中,添加jQuery如:
<script type="text/javascript" src="/path/to/jQuery-x.y.z.js"></script>
然后:
<script type="text/javascript">
$(document).ready(function()
$.ajax(
url:'/response.php',
cache:false,
success:function(data)
// Do something with the result
if(data=="true")
$('#mydiv').show();
else
$('#mydiv').hide();
);
);
</script>
并添加到myform.php
:
<h1>Some Random HTML</h1>
<div id='mydiv' class="<?php if(isset($_SESSION['opened']) && $_SESSION['opened']) echo "hidden_class";?>">
...</div>
因为这将为没有 JavaScript 的用户提供一致的体验。您不必显示/隐藏 div。你真的可以做任何事。
【讨论】:
您需要调用session_start()
来初始化会话数据。
不,我在 php.ini 中将它设置为自动启动:P 别那么迂腐。
嘿,如果你因为缓存问题而指责我,我会反击;)
我们的两个观点都是合法的。我只是认为您不应该假设对 PHP 不熟悉的人启用了非默认设置。无论如何,他可能在共享主机上。
好吧,穿上你的衬衫。但是我宁愿调试一个没有启动的会话而不是我的异步调用被缓存!以上是关于如何使用 Ajax 函数从 php 服务器获取会话变量? (PHP HTML JS Ajax)的主要内容,如果未能解决你的问题,请参考以下文章