2017-02-01 44 views
0

所以發生了什麼是當我登錄和做一個location.reload()$ _SESSION不更新,直到我刷新了幾次或等待像30- 60秒。
它似乎更像是基於時間的,但無法確定。

所以我一直在檢查stackoverflow,但許多問題都解決了301做非www。到www。 (我在.htaccess中完成的)。
我也把我的session_start();在身體的頂部。

if(!isset($_SESSION['username'])): ?> 
     <div class="right"><span class="button menuButton dropdownTrigger" data-dropdown-id="1"><a>Logga In</a></div> 
<?php else: ?> 
     <div class="right"><span class="button menuButton"><a>Profil</a></div> 
<?php endif; ?> 

所以這就是我刷新時應該更改的代碼。
它的工作原理就是它需要長時間/多次刷新直到它完成。

$.ajax({ 
type: "POST", 
url: "login/checklogin.php", 
data: "myusername=" + username + "&mypassword=" + password, 
dataType: 'JSON', 
success: function (html) { 
//console.log(html.response + ' ' + html.username); 
if (html.response === 'true') { 
//location.assign("../index.php"); 
     location.reload(); 
     return html.username; 
} else { 
     $("#message").html(html.response); 
     } 
}, 
error: function (textStatus, errorThrown) { 
     console.log(textStatus); 
     console.log(errorThrown); 
}, 
beforeSend: function() { 
     $("#message").html("<p class='text-center'><img src='images/ajax-loader.gif'></p>"); 
} 
}); 

這是我訪問哪個重新加載網站並返回值的php代碼。

如果您需要了解更多信息,請不要猶豫,告訴我!
在此先感謝!

對重複問題的更新
這不一樣,因爲它不能幫助更改頁面。

Update檢查與埃德

<?php 
session_start(); 
?> 
<!doctype html> 
<html> 

還測試這一點,它似乎並沒有解決問題。

更新,以顯示其中$ _SESSION使用

//If max attempts not exceeded, continue 
// Checks password entered against db password hash 
if (password_verify($mypassword, $result['password']) && $result['verified'] == '1') { 

//Success! Register $myusername, $mypassword and return "true" 
$success = 'true'; 
session_start(); 

$_SESSION['username'] = $myusername; 
} 
+0

可能重複的[php會話變量不更新](http://stackoverflow.com/questions/29388126/php-session-variables-not-updating) –

+0

你寫道,「我也把我的session_start();在身體的頂部。「不要把它放在''標籤的頂部。在任何類型的輸出之前,將它放在每個**腳本***的頂部,包括''開始標記。在任何輸出之前,您希望每次請求只運行一次並且只運行一次。 –

+0

@EdCottrell你的意思是這樣嗎?檢查我的更新 – MrNaitX

回答

0

不要把session_start()if塊內。正如我在你的帖子中的評論中多次說過的那樣,你需要一次運行session_start()一次,並且每次請求。如果只在password_verify()成功時才運行它,則不會在其他任何請求中使用您的會話。那是你的問題。

the manual

在session_start()創建一個會話或恢復基於經由GET或POST請求,通過或通過cookie傳遞會話標識符的當前一個

爲了安全起見,使它的第一行代碼,每次執行的頁面加載,除非你正在做一些很花哨的東西(你不是),並知道你在做什麼。

要格外清楚,你的代碼應該是這個樣子:

<?php 

session_start(); // PUT THIS HERE 

//If max attempts not exceeded, continue 
// Checks password entered against db password hash 
if (password_verify($mypassword, $result['password']) && $result['verified'] == '1') { 

    //Success! Register $myusername, $mypassword and return "true" 
    $success = 'true'; 

    $_SESSION['username'] = $myusername; 
} 

同樣,你需要確保對所有其他請求運行session_start(),也不僅僅是登錄處理程序。

另外,你有許多的「代碼味道」,例如(1)使用==比較,(2)比較的字符串'1'代替整數1的,和(3)的變量設定爲字符串'true' 。我強烈建議在編寫更多代碼之前閱讀phptherightway.com上的所有內容。

0

所以我測試關閉緩存,然後它的工作。已經和我的主機談過了,他們認爲這是最終的,而不是我的。