jQuery Mobile和PHP登录会话

问题描述:

我一直在我的网站上使用此登录脚本https://github.com/panique/php-login-minimal。当我没有使用jQuery Mobile时它工作得非常好。当我启用它时,似乎由登录脚本创建的php会话已死亡。例如:所有登录保护的网页,对页面的顶部验证码:jQuery Mobile和PHP登录会话

require_once("config/db.php"); 

require_once("classes/Login.php"); 

$login = new Login(); 

每当我试图返回到上一个页面,甚至去diferent链接时,会不工作了。

这里是我的全部main.php代码:

<?php 

require_once("config/db.php"); 


require_once("classes/Login.php"); 



$login = new Login(); 
?> 

<html> 
<head> 
    <title>Personal</title> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0;" /> 
     <meta name="apple-mobile-web-app-capable" content="yes" /> 


     <link rel="stylesheet" href="css/style.css" /> 


     <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.3/jquery.mobile-1.4.3.min.css" /> 

     <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script> 

     </script> 
     <script src="http://code.jquery.com/mobile/1.4.3/jquery.mobile-1.4.3.min.js"></script> 
     <script type="text/javascript" src="js/noty/packaged/jquery.noty.packaged.min.js"></script> 



      <script src="libraries/RGraph.common.core.js" ></script> 
      <script src="libraries/RGraph.bar.js" ></script> 



     <script type="text/javascript" src="js/script.js"></script> 
     <script> 
     function error(text) { 
     var n = noty({ 
       text  : text, 
       type  : 'error', 
       dismissQueue: true, 
       layout  : 'bottomCenter', 
       theme  : 'defaultTheme', 
       maxVisible : 5 
      }); 
     } 
     function ok(text) { 
     var n = noty({ 
       text  : text, 
       type  : 'success', 
       dismissQueue: true, 
       layout  : 'bottomCenter', 
       theme  : 'defaultTheme', 
       maxVisible : 5 
      }); 
     } 


     </script> 

     <script src="js/jquery-ui-1.8.23.custom.min.js" type="text/javascript"></script> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head> 
<body> 
<div data-role="page" class="page contact-form"> 
     <div data-role="header"> 
      <a href="login.php" data-icon="arrow-l" data-direction="reverse">Voltar</a> 
      <a href="index.php" data-icon="home" data-direction="reverse">Home</a> 
      <h1>Login</h1> 
     </div><!--/header--> 
     <div color-bar> 
      <div data-role="content" align="center" id="logina"> 
       <!--<h3><em>Faca o login</em></h3> 
        <p>Aqui, voce acessara sua pagina exclusiva.</p>--> 
        <a href="#"><img src='img/logo2.png' alt="portfolio image" /></a> 
        <hr /> 
        <div id="contact-form-wrapper"> 
        <div data-role="content"> 
         <?php 

         echo $_SESSION['user_login_status']; 
         if ($login->isUserLoggedIn() == true) { 


          if (isset($_GET["planilha"])){ 
           include("views/planilha.php"); 
           die(); 
          } 
          if (isset($_GET["fichas"])){ 
           include("views/fichas.php"); 
           die(); 
          } 
          if (isset($_GET["progresso"])){ 
           include("progresso.php"); 
           die(); 
          } 
          if (isset($_GET["setexe"])){ 
           include("views/setexe.php"); 
           die(); 
          } 
          if (isset($_GET["addficha"])){ 
           include("views/addficha.php"); 
           die(); 
          } 
          if (isset($_GET["editficha"])){ 
           include("views/editficha.php"); 
           die(); 
          } 
          if (isset($_GET["addficha2"])){ 
           include("views/addficha2.php"); 
           die(); 
          } 
          include("views/logged_in.php"); 

         } 






         else { 

           include("views/loginsub.php"); 
         } 

         ?> 
       </div> 
       </div> 

正如你所看到的,我有一个主页上显示根据URL参数我想要的页面。当我不包括jQuery的手机脚本,它很好地工作。但是,当它启用时,登录时,我想浏览网站不能正常工作。似乎创建新登录的php代码不会在我更改页面时执行。我已经禁用了ajax导航,但它一直在窃听。

有人可以帮助我吗?

非常感谢!

+0

如何设置/定义$ _SESSION ['user_login_status']? – 2014-08-31 16:51:16

+0

on classes/Login.php。在所有登录代码都被管理的情况下 – 2014-08-31 16:54:06

+0

如果像你说的那样,jQuery手机有问题,一次一个注释掉相关的代码行,你会发现这个bug。在打开' 2014-08-31 16:55:53

在登录类__construct()功能,你会发现session_start() ---即必须在要使用的$_SESSION变量的所有页面调用。

所以,在您的网页没有被访问控制,你需要扔在session_start()

为了证明这一点,你为什么不尝试扔在块这样的:

if(! session_id()) { 
echo "No session! Starting, now."; session_start(); 
} else { 
echo session_id(); 
} 
+0

但我访问的所有页面都在main.php下。当jquery mobile没有启用时,它工作得很好 – 2014-08-31 16:30:12

+0

jQuery没有办法干扰会话。不可能以任何方式塑造或形成。 (当然,除非篡改PHPSESSID cookie - 这不太可能)。 – 2014-08-31 16:43:16

+0

它的发生。我认为这个问题是因为jQuery Mobile的缓存。当我禁用它时,一切都是完美的。 – 2014-08-31 16:45:32

你需要把session_start()放在每个php文件的顶部。每个使用会话的文件都需要拨打session_start()。在处理会议时这是常见的错误。

+0

即使即时通讯只使用1个php文件显示其他的url根据参数?它已经在这个主要的 – 2014-08-31 17:14:32

+0

请尝试添加它 – 2014-08-31 17:15:13

+0

不工作.... – 2014-08-31 21:06:55