【问题标题】:Mobile browsers doesn't support session variables?移动浏览器不支持会话变量?
【发布时间】:2012-08-23 08:35:21
【问题描述】:

我有一个浏览器版本的网络应用程序,并且我有一些值存储在 cookie 中。现在我正在制作一个移动版本,但我的 cookie 似乎无法正常工作。 是否可以在移动设备上使用 cookie?

我正在尝试执行此代码,但我的 php 给了我一个空值:

$(document).ready(function() {
    var session_lang= '<?php if(isset($_SESSION['SESS_LANGUAGE']))
                            echo $_SESSION['SESS_LANGUAGE'];?>';
            if (session_lang!='')
            {
                check_and_change(session_lang);   
            }
    });

有没有其他方法可以将数据存储在内部存储器中,以便它可以用作 cookie? 移动设备是否支持会话变量?我在看萤火虫,我可以看到我可以创建会话变量,但是当我想读取它时它是空的。 可能是什么问题以及如何解决?

编辑: 我会给你几乎整个代码,这样你就可以看到我在做什么......顺便说一句。此代码在 PC 浏览器上正常运行。

Javascript 文件:

$(document).ready(function() {

    function languageChange()
    {
         var lang = $('#websites1 option:selected').val();

        return lang;
    }


    $('#websites1').change(function(e) {                    

        var lang = languageChange();

        var dataString = 'lang=' + lang;

        $.ajax({

            type: "POST",
            url: "pass_value.php",
            data: dataString,
            dataType: 'json',
            cache: false,
            success: function(response) {

                    check_and_change(response.message);
                 }
        });

        return false;

    });

} );

    function check_and_change(lang)
     {
            switch (lang)
                         { //do something
                          }
    }

然后,我在上面放置的第一部分是在我正在寻找并且正在打开的实际 php 站点上:

最后是pass_value.php:

<?php 
session_start();

$_SESSION['SESS_LANGUAGE'] = $_POST['lang'];

print json_encode(array('message' => $_SESSION['SESS_LANGUAGE']));
die();
?>

我真的不知道为什么这个代码在手机上不起作用。

【问题讨论】:

  • 所以不是保存到会话变量中,而是保存到网络存储中?
  • 会话 ID 可以通过 cookie 或 GET 方法传递,据我所知 - 移动设备上的浏览器确实支持 cookie。你确定你的代码真的有效吗?你甚至开始了会议吗?
  • 坏主意,因为很多移动设备都没有这种能力。

标签: php javascript mobile cookies jquery-mobile


【解决方案1】:

移动浏览器上的 Cookie definitely work。你说“我在看萤火虫”,这让我觉得你不是真的在看手机。

你有started the sessionturned on error reporting吗?

【讨论】:

  • 嗨,我正在查看浏览器、iOS 和 Android 设备。好的,让我检查一下你写的那些东西。
  • 那么$_SESSION['SESS_LANGUAGE'] 永远不会被设置,或者它在某处被覆盖/删除。要对此进行调试,您可以查看代码并执行var_dump($_SESSION);die; 或使用xdebug 之类的内容进行跟踪。
  • @denonth 您可以尝试simple example like this 以查看会话是否在您的不同设备上运行。在设备上的第二次加载时,它应该说“.. was set ..”
  • 是的,此示例适用于移动设备。但是我注意到会话变量在我使用程序时被保存,当我刷新它时它没有设置。或者它可能不是一开始就设置好的?!但我没有收到任何错误
【解决方案2】:

我也遇到过类似的情况,发现在我的平板调用我在.ajax( )调用的URL参数中指定的脚本之前,它实际上是在再次调用index.php脚本。

我的手机也是这样。由于我在index.php 中初始化了我的会话变量,因此它们不断被重新设置为其初始值(看起来它们没有在页面之间正确存储)。

我从来不知道为什么index.php 会被重新调用,但我在初始化语句周围添加了if !isset( ) 检查并清除了它。

【讨论】:

    【解决方案3】:

    在 Android 上,打开“数据保护程序”有效地破坏了我的会话。我有一个登录脚本,登录成功后会重定向到上一页。一直工作到我打开数据保护程序。关闭它使其再次工作。 Google 确实声明数据保护程序可能会影响我猜想包括我的脚本的安全页面,该脚本不在 HTTPS 网站上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      • 2011-07-01
      相关资源
      最近更新 更多