2009-07-31 8 views
8

Tôi muốn xác định xem người dùng có đăng nhập hay không nếu họ chỉ là ẩn danh từ javascript ...Tôi làm cách nào để kiểm tra xem liệu người dùng có ẩn danh hay đã đăng nhập từ javascript không?

Tôi đã tìm thấy this question, nhưng đó là mã php và tôi không chắc chắn liệu có phiên không biến được gọi là logged_in được lưu trữ khi đăng nhập hoặc nếu đó chỉ là một cái gì đó mà người đó đã tự thực hiện.

Bất cứ ai cũng biết cách tôi có thể kiểm tra xem liệu người dùng đã đăng nhập từ javascript, có thể sử dụng ajax không?

Edit: Tôi đang chạy Asp.Net MVC, xin lỗi nên đã xác định

Đây là để tôi có thể thực hiện một ajax đăng nhập client-side. Khi tải trang, tôi cần biết liệu người dùng có đăng nhập hay không, vì vậy tôi có thể thực hiện điều gì đó tương tự như điều khiển <asp:LoggedInView> bằng cách sử dụng jquery.

Cảm ơn,
Matt

+0

là trang của bạn trong asp, php, vv? – VinPepe

+0

Tôi đã chỉnh sửa phản hồi của tôi theo các sửa đổi của bạn. – kentaromiura

Trả lời

10

Bạn không thể đọc dữ liệu đã lưu phiên từ JavaScript.

Một cách dễ dàng để làm điều đó là tạo ra một var JS từ PHP (dễ dàng hơn giải pháp cookie), như thế này:

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>'; 
} 

Sau đó, JS sẽ chỉ đơn giản là kiểm tra nguồn gốc logged_in var để xem nếu người dùng được đăng nhập.

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

Nếu chúng ta nói về điều xấu thực hành (xem tất cả các ý kiến ​​trên câu trả lời của tôi) thì điều này sẽ chịu đựng tất cả những sự sụp đổ tương tự. Nó vẫn là một biến phía khách hàng có thể dễ dàng sửa đổi. Tuy nhiên, theo như trả lời câu hỏi của poster ban đầu, câu hỏi này cũng tốt. – idrumgood

+6

hoàn toàn không an toàn. Cách tốt nhất: kiểm tra phía máy chủ với yêu cầu http ajax khi hành động cần đến nó (có thể có trong hàm javascript của bạn) – Julien

+0

câu trả lời tuyệt vời cho người mới bắt đầu! có thật không –

6

[SỰ TỪ BỎ] Kể từ khi tôi đã nhận được rất nhiều ý kiến ​​từ mọi người về là 'thực tế xấu' này, tôi chỉ cần đi để nói điều này: nó là xấu thực hành để làm theo cách này, nhưng chúng tôi không biết áp phích ban đầu có ý định làm gì. Đối với tất cả chúng ta biết, anh ấy đã làm mọi thứ khác 100% chính xác và an toàn, và chỉ hỏi xem có cách nào để lấy nó từ javascript không. Những gì tôi đã làm dưới đây được cung cấp ý tưởng tốt nhất của tôi để làm thế nào để hoàn thành những gì ông đã yêu cầu. [/ DISCLAIMER]

Bạn có thể có php của mình hoặc bất kỳ ngôn ngữ phụ trợ nào bạn đang sử dụng, đặt cookie mà bạn có thể đọc bằng javascript.

document.cookie 

đơn giản như vậy. Bạn sẽ phải tìm kiếm chuỗi cookie cho tên của cookie đăng nhập của bạn.

Bạn cũng có thể sử dụng để thiết lập một cookie và làm đăng nhập của bạn trong qua javascript (mặc dù có lẽ không phải là ý tưởng tốt nhất.)

Xem here cho một cái nhìn tổng quát của javascript truy cập cookie.

[sửa]

Để giải quyết vấn đề của một kịch bản client có quyền truy cập vào thông tin phiên làm việc, và khả năng sử dụng ajax gợi ý trong câu hỏi ban đầu:

Vâng, một cuộc gọi ajax sẽ là một rất cách dễ dàng để kiểm tra điều này. Tôi là một anh chàng jQuery, vì vậy kinh nghiệm ajax của tôi nằm ở đó, nhưng về cơ bản, bạn sẽ thực hiện một cuộc gọi ajax đến chức năng phụ trợ của bạn, và chức năng phụ trợ đó chỉ kiểm tra biến phiên 'đăng nhập', trả về true hoặc false.

Ngoài ra, vì bây giờ bạn đã đề cập rằng bạn đang sử dụng jQuery, hãy xem this page để truy cập cookie jQuery dễ dàng. [/ edit]

+0

Tôi sẽ không downvote bởi vì về mặt kỹ thuật là chính xác nhưng tôi nên tư vấn, điều này có lẽ là BÀI HÁT! Các tập lệnh của khách hàng không nên biết bất kỳ điều gì về phiên, nó phải được xử lý một cách trân trọng phía máy chủ. – kentaromiura

+3

Bạn chính xác, kịch bản khách hàng KHÔNG NÊN biết về công cụ phiên, nhưng câu hỏi của người đăng ban đầu yêu cầu cách truy cập thông tin từ javascript, đến câu trả lời được cung cấp sẽ giải quyết vấn đề đó. – idrumgood

+0

Ok, nhưng nó vẫn còn sai, nếu bạn đang sử dụng xác thực cookieless cách duy nhất là để xem nếu url có một cái gì đó trong đó. Và nếu ai đó sử dụng một chế độ xác thực tùy chỉnh (ví dụ truyền sessionID trong một trường ẩn), cách này không phải là cách tốt để giải quyết. Điều chính xác cần làm là tải 2 tập lệnh khác nhau, một tập lệnh để truy cập ẩn danh và một cho người dùng đã xác thực.stop. btw, nếu kịch bản hiển thị/ẩn những điều quan trọng vì lý do bảo mật rõ ràng (và hiệu suất quá) mà một phần nên được tạo ra phía máy chủ. – kentaromiura

0

Bạn có thể phân tích document.cookie.

+1

Sẽ không hoạt động với cookie HttpOnly, và ngay cả khi không được sử dụng nó vẫn còn sai, bởi vì bất cứ ai có thể bắt đầu một phiên nhưng điều đó không có nghĩa là họ đã đăng nhập ... cuối cùng, JS không nên đọc cookie dành cho phía máy chủ –

1

Nó không có ý nghĩa gì cả. Nếu người dùng đăng nhập, bạn biết nó phía máy chủ. Vì vậy, bạn không phải kiểm tra xem bạn có đăng nhập vào phía máy khách hay không.

--edit:

Sau khi làm rõ của bạn, tôi chỉ có thể gợi ý để xác minh trên bộ điều khiển nếu người dùng đã đăng nhập, nếu có thì bạn sẽ hiển thị xem bình thường, nếu không bạn sẽ hiển thị một Xem khác nhau.

- EDIT cách ngôn nói thêm:

Một số người, khi phải đối mặt với một vấn đề, suy nghĩ “Tôi biết, tôi sẽ sử dụng ajax.” Bây giờ họ có ít nhất hai vấn đề

2

Đây là một giải pháp thường được thực hiện với các ngôn ngữ phía máy chủ. Với JS bạn, ít nhất, có thể đặt trong ứng dụng khách một cookie nơi lưu trữ thông tin đó. Tuy nhiên với Ajax bạn nên có một trang (ví dụ check_login.jsp/.apsx vv), nơi để kiểm tra nếu người dùng được đăng nhập (truy cập vào một DB, một biến Session, v.v.) và nếu quay trở lại JS (thông qua JSON) mà thông tin và ví dụ ánh sáng một DIV với một màu xanh ...

vì vậy:

check_login.aspx -> trở về các thông tin qua Response.Write("{user_logged:true}");

từ login.aspx trong mã HTML của bạn với JS bạn sẽ có một cuộc gọi AJAX, nơi xmlhttp của bạn đã là một thể hiện của XMLHttpRequest đối tượng ...

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

Cách tốt nhất theo ý kiến ​​của tôi là làm điều đó thông qua ajax.

Điều này sẽ thực hiện.

tập tin 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

Bạn có thể kiểm tra với bên dưới mã:

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