2014-08-31 61 views
0

我一直在我的網站上使用此登錄腳本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。在打開'<?php'標籤後立即在文件頂部添加錯誤報告 'error_reporting(E_ALL); ini_set('display_errors',1);'看看它是否也會產生任何東西。 – 2014-08-31 16:55:53

回答

0

在登錄類__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

0

你需要把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