如何使用 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)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 JQUERY 读取 SESSION 变量

如何使用子域和 AJAX 使 PHP 会话工作?

codeigniter php 和 jquery - 如何从多个表中获取数据并通过 ajax 返回

使用 AJAX 在 PHP 中设置会话变量

使用 AJAX 检查 PHP 会话是不是存在或过期

使用 jQuery 的 $.ajax( ) 函数从 php 文件中获取 JSON 数据不起作用