【问题标题】:How to check whether session exists from javascript?如何从javascript检查会话是否存在?
【发布时间】:2017-03-17 07:28:21
【问题描述】:

我有一个应用程序,前端使用 javascript(使用 AngularJS 和 jQuery),后端使用 java。该应用有很多页面 (ng-view)。

我需要知道后端的会话当前是活动的还是无效的。基于此,我需要决定是否在页面上显示注销按钮。

虽然我从thisthis 了解到会话是使用session cookies 在浏览器中维护的,但我得出结论,我们必须手动设置我们在javascript 中创建的cookie 对象中的变量值。

有没有办法获取用于与服务器通信的会话 cookie?通过获取该 cookie,我们或许可以看到会话当前是否处于活动状态。

如果我的解释有误,请告诉我。

【问题讨论】:

  • 这不是要走的路。您将无权访问服务器关于会话存在的记录。任何人都可以创建一个带有会话 ID 的本地 cookie。
  • 为什么不根据是否有会话有条件地输出视图页面? cookie 不可靠,因为服务器可能有自己的会话超时。
  • @raduation 你的意思是说我应该先从服务器查询每个页面的会话是否存在,然后根据它决定显示注销按钮?
  • 是的,您应该在服务器端检查是否有活动会话并执行 if 语句以显示或不显示注销按钮。

标签: javascript jquery angularjs session cookies


【解决方案1】:

您无法使用 Session 在 java 脚本中检查会话是否过期,因为如果您编写这样的代码:

if (isset($_SESSION["PHPSESSID"])) {}

在文档上写它可以正常工作,但不能更改 javascript 的值调用。 如果您重新加载页面而不是更新会话值。

【讨论】:

    【解决方案2】:

    通常您无法从 JavaScript 访问会话 cookie。 最简单的方法是向服务器发出 ajax 请求以检查您是否有经过身份验证的会话。 或者,您可以使用会话信息设置自定义 cookie。

    【讨论】:

      【解决方案3】:

      使用 ajax 代码 PHP (session.php)

      <?php
      session_start();
      if (isset($_SESSION['username'])) {
          echo 'success';
      }
      

      jquery:

      $.ajax({
          url: 'path-to/session.php',
          type: 'POST',
          success: function(result) {
              if (result == 'success'){
                  //...
              }else{
                  //...
              }
          }
      });
      

      【讨论】:

        【解决方案4】:

        其实有一种方法可以通过 javascript 来检查会话,这里是代码

        $.get('path/to/session_check.php', function(data) {
         if( data == "Expired" ) {
             alert("Session expired");
         } else if (data == "Active" ) {
             alert("Session active");
         }
        });
        

        【讨论】:

          猜你喜欢
          • 2011-02-18
          • 1970-01-01
          • 2012-10-18
          • 2011-12-29
          • 2018-04-04
          • 2013-02-26
          • 2013-05-22
          • 1970-01-01
          相关资源
          最近更新 更多