【问题标题】:How to get session variables from php server with Ajax function? (PHP HTML JS Ajax)如何使用 Ajax 函数从 php 服务器获取会话变量? (PHP HTML JS Ajax)
【发布时间】:2023-04-04 18:10:01
【问题描述】:

所以在我的 php 中我有这样的东西

$_SESSION['opened'] = true;

但在用户对其他 html\php 页面执行某些操作之前,它不会设置为 true

所以我需要一些 Ajax 函数来获取这个会话变量。以及一些 PHP 函数示例,用于获取表单中的变量,以便 Ajax 获取它。

所以我需要一些东西来 AJAX 请求一个动作(一些简单的 php 代码),它将从 $_SESSION 返回一个值。

这样的事情怎么办?

【问题讨论】:

    标签: php javascript html ajax 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 不熟悉的人启用了非默认设置。无论如何,他可能在共享主机上。
    • 好吧,穿上你的衬衫。但是我宁愿调试一个没有启动的会话而不是我的异步调用被缓存!
    猜你喜欢
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 2018-04-04
    • 2016-12-23
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多