2009-07-31 78 views
8

我想確定,或者如果他們從JavaScript只是匿名用戶是否登錄...如何檢查用戶是匿名用戶還是用javascript登錄?

我發現this question,但它的PHP代碼,我不知道是否有一個會話被稱爲logged_in的變量在登錄時被存儲,或者如果那只是那個人自己實現的東西。

任何人都知道我可以檢查,看看用戶是否從JavaScript登錄,可能使用AJAX?

編輯:我運行Asp.Net MVC,對不起,應該指定

這是爲了讓我可以實現客戶端AJAX登錄。當頁面加載時,我需要知道用戶是否登錄,所以我可以實現類似於使用jQuery的控制<asp:LoggedInView>

謝謝
馬特

+0

是您的網頁在ASP,PHP等? – VinPepe 2009-07-31 14:40:18

+0

我根據您的修改編輯了我的回覆。 – kentaromiura 2009-07-31 17:24:24

回答

10

您無法從JavaScript讀取會話保存的數據。

一個簡單的方法來做到這一點是由PHP創建一個JS變種(比cookie的解決方案更容易),像這樣:

if ($_SESSION['logged_in'] == 1) { 
    echo '<script type="text/javascript">var logged_in=true;</script>'; 
} else { 
    echo '<script type="text/javascript">var logged_in=false;</script>'; 
} 

然後JS只會檢查本地logged_in VAR來看看用戶已登錄。

<script type="text/javascript"> 
    if (logged_in) { 
     alert("My user is logged in!"); 
    } 
</script> 
6

[免責聲明]因爲我已經從這個被「壞習慣」的人越來越這麼多的意見,我只是要這樣說:這是不好的做法做這樣,但我們不知道原始海報打算做什麼。對於我們所知道的,他做了100%正確和安全的所有其他事情,並且只是問是否有辦法從javascript獲取它。我在下面做了什麼是我如何完成他所問的最好的想法。 [/ DISCLAIMER]

你可以讓你的PHP或任何你使用的後端語言,設置一個cookie,然後你可以用JavaScript讀取。

document.cookie 

那樣簡單。您必須搜索cookie字符串以查找您登錄的cookie的名稱。

你也可以用它來設置cookie,並通過JavaScript在做你的日誌(雖然可能不是最好的主意。)

爲JavaScript的Cookie訪問的簡要概述見 here

[編輯]

爲了解決有機會獲得會話信息的客戶端腳本的問題,以及可能使用AJAX在原來的問題建議:

是,Ajax調用將是一個非常簡單的方法來檢查這一點。我更像一個jQuery人,所以我的ajax經驗就在那裏,但基本上,你會對你的後端函數做一個ajax調用,而後端函數只是檢查'loggedin'會話變量,返回true或false。

另外,既然您現在提到您正在使用jQuery,請參閱this page,以獲得簡單的jQuery cookie訪問。 [/編輯]

+0

我不會downvote,因爲技術上是正確的,但我應該建議,這可能是錯誤的! 客戶端腳本不應該知道會話的任何內容,它必須透明地處理服務器端。 – kentaromiura 2009-07-31 14:56:42

+3

你是對的,客戶端腳本不應該知道會話的東西,但原始海報的問題是如何從javascript中訪問信息,以提供的答案照顧。 – idrumgood 2009-07-31 15:01:03

1

它沒有任何意義。 如果用戶已經登錄,您知道它在服務器端。 所以你不必檢查你是否登錄了客戶端。

- 編輯:

你澄清後,我只能建議在控制器上驗證用戶登錄,如果是這樣你會顯示正常視圖,否則就會顯示出不同的看法。

- 編輯添加格言:

一些人,當遇到一個問題,認爲「我知道,我將使用AJAX。」現在他們有至少兩個問題

2

這是一種通常用服務器端語言實現的解決方案。用JS,至少, 可以在其客戶端設置一個存儲該信息的cookie。

但是,使用Ajax,您應該有一個頁面(例如check_login.jsp/.apsx等)在哪裏檢查 如果用戶登錄(訪問數據庫,會話變量等),如果是這樣,返回JS(通過JSON)信息和例如燈帶綠色的DIV ...

所以:

check_login.aspx - >返回回通過Response.Write("{user_logged:true}");

login.aspx的信息在你的HTML代碼與JS你會有一個AJAX電話,你的xmlhttp已經XMLHttpRequest對象的實例...

var logged = JSON.parse(xmlhttp.responseText); // don't use eval 
if(logged.user_logged) 
document.getElementById("u_l").style.backgroundColor = "#00FF00"; 
1

在我看來,最好的辦法是通過Ajax來做到這一點。

這將做到這一點。

JS文件...

 $.ajax({ 
      type: 'POST', 
      dataType: 'json', 
      url: 'check.php', 
      success: function(d) { 
       if(d.r == "fail") { 
        window.location.href = d.url; 
       } else { 
        console.log(d.msg); 
       } 
      } 
     }); 

check.php

if(!isset($_SESSION['loggedin'])){ 

     $response = array(
      'r' => 'fail', 
      'url' => '/home.php' 
     ); 
    } else { 

     $response = array(
      'r' => 'success', 
      'msg' => 'Logged in' 
     ); 
    } 

    echo json_encode($response); 
    exit; 
0

你可以用下面的代碼檢查:

if(jQuery('body').hasClass('logged-in')) { 
// add your jquery code 
} 
相關問題