2013-03-06 64 views
0

我正在使用PHP在這個網頁上工作。我使用easyphp版本進行本地測試:5.3.9 我做了一個常用登錄,註銷功能。當我在本地測試時,就像預期的那樣工作。但是當我通過FTP將它上傳到godaddy託管服務時,它開始做些奇怪的事情。PHP奇怪,本地工作,但服務器沒有

  • 會話變量不能正常工作,有時會工作,有時不起作用! 登錄連接和數據庫驗證工作正常!但是從另一個失敗的文件讀取SESSION變量時。

它可能是什麼? PHP版本?但我只是使用簡單的$ _SESSION ['name']變量。錯誤?請幫忙!

這是我已經嘗試過:

  • 使用其他瀏覽器。
  • 重新上載源(多次)
  • 清除緩存,Cookie等。
  • 測試一步一步,但就像我說的,它工作正常本地託管的網頁。

最後一件可能很重要的事情是數據庫託管在服務器上(這不是我的本地pc ofc)而且這個數據庫的連接在兩種情況下都工作正常。

這是我的代碼:

landing.php(如果你想知道XD):

<div class="xxx">Log in</div> 
    <div class="xxx"> 
     <form class="xxxx" method="post" action="Bean.php"> 
      <input type="hidden" value="login" name="oper"> 
      <input type="text" placeholder="E-mail" name="mail"/> 
      <input type="password" placeholder="Password" name="pass"/> 
      <input type="submit" value="LOG IN!" /> 
     </form> 
    </div> 

Bean.php

if (!isset ($_COOKIE[ini_get('name')])) { 
session_set_cookie_params(0, '/'); 
session_name('name'); 
session_start(); 
} 
if($oper=="login") 
{ 
$user=$cws->VerifyUser($_POST['mail'],$_POST['pass']);//$cws is a class that connects to the server with the db via WS 
if(strlen($user->body->mail)>5)//this is because if the user is not found it returns blank or '@.' 
{ 
    $_SESSION['session_mail']=$user->body->mail; 
    $_SESSION['session_name']=$user->body->name; 
    $_SESSION['session_miniPicture']=$user->body->miniPicture; 
    $_SESSION['session_on']=true; 
    //This are the variables I can't read later! 

    echo("<script type=\"text/javascript\" >            location.replace(\"../home.php\"); 
           </script>"); 
} 
else{ 
    echo("<script type=\"text/javascript\" > 
            alert(\"E-mail or password incorrect \");         location.replace(\"../landing.php\"); 
           </script>"); 
    } 

} 

home.php:

if (!isset ($_COOKIE[ini_get('name')])) { 
session_set_cookie_params(0, '/'); 
session_name('name'); 
session_start(); 
} 
//In this check, the variable $_SESSION['session_on'] is NOT set! WHY??? 
if(!isset($_SESSION['session_on']) || $_SESSION['session_on']==false) 
{ 
    echo("<script type=\"text/javascript\" > 
             location.replace(\"landing.php\"); 
             </script>"); 

} 
echo ("mail: ".$_SESSION['session_mail']."<br/>"); // for debug 
echo ("name: ".$_SESSION['session_name']."<br/>"); // for debug 
echo ("on: ".$_SESSION['session_on']."<br/>"); // for debug 

Welcome <?php echo $_SESSION['session_name']; ?> &nbsp;- <a href="signout.php">Sign out</a> 

signout.php:

if (!isset ($_COOKIE[ini_get('name')])) { 
session_set_cookie_params(0, '/'); 
session_name('name'); 
session_start(); 
} 

if(isset($_SESSION['session_on']) && $_SESSION['session_on']==true) 
{ 
    $_SESSION['session_on']=false; 
    echo("<script type=\"text/javascript\" > 

             location.replace(\"landing.php\"); 
            </script>"); 

} 

請幫忙!我應該聯繫godaddy支持嗎?這與PHP版本有關嗎?會是什麼呢?謝謝

亞歷杭德羅·卡薩斯

+0

使用其他瀏覽器並沒有真正改變任何東西。 PHP腳本在服務器端執行,PHP不關心你使用的瀏覽器,它只關心請求。 – Shoe 2013-03-06 00:40:23

+0

'ini_get('name')'business是什麼?爲什麼在初始化會話之前檢查cookie? – Phil 2013-03-06 00:41:11

+0

那麼我得到的警告說會議已經開始,所以我找到了這個解決方案。這是錯的嗎?謝謝你的迴應。 – Alejandro 2013-03-06 00:44:14

回答

1

好吧,我看 - 你的問題如下:

您正在啓動一個會話只有當沒有會話cookie。但是如果你註銷,你的會話和你的cookie不會被銷燬。情況是這樣的。你在File1.php的會話中寫了一些東西,並想在File2.php中讀取它。但是在File2.php中,會話永遠不會被啓動,因爲你有一個會話cookie。您將不得不在任何文件中啓動會話,因此請從您的代碼中移除$ _COOKIE條件。

session_set_cookie_params(0, '/'); 
session_name('name'); 
session_start(); 
+0

嗨,我正在測試這個,我會在一分鐘內回答!感謝您的幫助 – Alejandro 2013-03-06 00:53:19

+0

如果您遇到另一個錯誤,我們可以對此進行調查。 – Oliver 2013-03-06 00:54:12

+0

您好,我改變了這個if(!isset($ _COOKIE [ini_get('name')])){ session_set_cookie_params(0,'/'); session_name('name'); session_start(); } -----對於這個:if(!isset($ _SESSION)){session_start();} }但我有同樣的結果。 – Alejandro 2013-03-06 00:57:44

相關問題