Tự động đăng xuất khi user đóng trình duyêt hay đóng một tab của trình duyệt.

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
nampham's picture

Chào mọi người

Mình hiện đang có vấn đề với việc đăng xuất của user. Hiện tại, sau khi user đăng nhập, user đóng trình duyệt và sau đó họ mở trình duyệt lại thì tài khoản của họ vẫn đang trong trạng thái đăng nhập. Và nó thì không đc an toàn nó user sử dụng các máy vi tính ở các tiệm net, hay các máy tính tập thể.

Mình muốn user sẽ tự động đăng xuất khi họ đóng trình duyệt hay tab của trình duyệt.

Mình đã thử thay đổi 'session.cookie_lifetime', 'session.cache_expire', 'session.gc_maxlifetime' thành 0, trong file settings.php. Nhưng nó không có kết quả.

Mình cũng đã thử set 'php_value session.cookie_lifetime 0, php_value session.gc_maxlifetime 0' trong file .htaccess, nhưng cũng không có kết quả.

Các bạn cho mình xin ý kiến nhé,

Cảm ơn, mọi người

Comments

Có một cách là bạn tự hander

tuyenbk83's picture

Có một cách là bạn tự hander SessionID bằng cách truyền nó qua biến GET thay vì truyền qua Cookie. Ví dụ như thằng PhpMyAdmin nó dùng cách này. Tuy nhiên nếu dùng cách này phải cẩn thận lỗi Session Hijacking

Mình cũng đã thử set

tuyenbk83's picture

Mình cũng đã thử set 'php_value session.cookie_lifetime 0, php_value session.gc_maxlifetime 0' trong file .htaccess, nhưng cũng không có kết quả.

<= Còn việc set thế này còn tuỳ thuộc hosting nó có cho phép hay không.

Theo mình thì nên thế này 1

pavennt's picture

Theo mình thì nên thế này 1 là khi log out bạn nên dùng hàm drupal_session_destroy_uid($uid) để để hủy session của uid đó luôn . Còn cách mà bạn muốn tắt trình duyệt mà tự logout luôn thì có có 2 trường hợp . trường hợp 1 thì khi người dung chon lưu mật khẩu vào trình duyệt và trường hợp không lưu (riêng trường hợp này không cần xử lý gì cả vì session sẽ chết khi trình duyệt bị đóng ) để giải quết cái đóng trình duyệt thì bạn có thể dùng js bắt sự kiên đóng trình đuyệt rồi call tới 1 hàn ajax và dùng hàm php thường session_unset(); rồi tiếp tục đóng trình duyệt bằng js là xong
:)

Mình đã thử trường hợp 1 như

nampham's picture

Mình đã thử trường hợp 1 như bạn nói, mình xóa hết password đc lưu trong trình duyệt, xóa hết cookie, cache và mọi thứ. Sau đó mình đăng nhập, rùi mình đóng trình duyệt lại. Mình mở trình duyệt lại thì user vẫn trong trạng thái đăng nhập.

Còn trường hợp 2, thì mình sẽ thử rùi mình sẽ cho bạn biết kết quả sau nha.

Cảm ơn bạn đã góp ý cho mình.

donamkhanh's picture

Chào bạn,

Bạn thử dùng module Remember Me rồi ko tick chọn Remember, login xong rồi close browser lại, sau đó bật lại trang xem có bị không? Nếu không bị thì bạn thử xem code họ thực hiện như thế nào nhé :)

Hoặc bạn xài trick, cài module Remember Me kia nhưng ẩn béng cái checkbox Remember me đi là xong :D

Nice weekend các bạn!

Cảm ơn mọi người đã góp y cho mình.

nampham's picture

Mình đã thử sử dụng module autologout rồi, nhưng nó không có đáp ứng được nhu cầu của mình.

Còn module 'Remember me', mình đã thử set là 15 giây, và sau khi mình log in, hết 15 giây thì mình sẽ bị log out, nó cũng hk đáp ứng được nhu cầu của mình.

Mình muốn user sau khi log in, rùi họ đóng trình duyệt, sau đó họ mở trình duyệt lại, họ phải log in 1 lần nữa. Như vậy thì nó sẽ bảo mật hơn khi user sử dụng các máy tính công cộng khi truy cập vào trang web của mình.

Hiện mình đang thử sự dụng javascript để làm điều này. Hiện tại vẫn chưa thành công.

Mình đã làm được.

nampham's picture

Mình đã làm được rồi, mình chỉ cần thay đổi ini_set('session.cookie_lifetime', 2000000) thành ini_set('session.cookie_lifetime', 0) trong file settings.php.
Sau đó mình clear cookie của trình duyệt và set lại trình duyệt không cho nó lưu cookie nửa.
Và sau khi mình đăng nhập, mình đóng trình duyệt rồi mở lại, account đã bị log out.

Cảm ơn mọi người đã góp ý cho mình.

Mình thấy bước: "set lại

donamkhanh's picture

Mình thấy bước: "set lại trình duyệt không cho nó lưu cookie nữa" của bạn có vấn đề, nếu làm cách này thì khi user dùng trình duyệt ở máy khác thì họ cũng phải làm lại thao tác như vậy à? :)

Cái này không liên quan gì

pavennt's picture

Cái này không liên quan gì tới trình duyệt ở máy khác cookie nó chỉ set cho trình duyệt ở máy hiện tạ mà thôi :)

Các cậu còn nhớ bọn quảng cáo

topiclawhn's picture

Các cậu còn nhớ bọn quảng cáo khi click thoát nó hỏi lằng nhằng không ? đó, dùng cái hàm JS đó, khi click đóng trình duyệt thì thoát sau đó mới đóng trình duyệt...

Mời truy cập Vietdex.com là mạng hỏi đáp trực tuyến, Vietdex.net là mạng xã hội viết blog !

Đồng ý với bạn Nam Khánh. Như

tuyenbk83's picture

Đồng ý với bạn Nam Khánh. Như thế user phải làm việc setting trên trình duyệt. Mà ko phải ai cũng biết điều đó.

Cái đó còn tùy vào browser của user thôi.

nampham's picture

Vì không phải users nào cũng biết set cho browser lưu lại cookie.
Với lại nếu không dùng cách này thì mình cũng hết cách rùi, không thể ngồi dùng javascript để bắt sự kiện khi browser bị đóng.
Mình đã thử dùng hàm 'onbeforeunload' của javascript để bắt sự kiện, nhưng lại có vấn đề là khi refresh, click vào cái link, chuyển trang,.... thì nó cũng đều gọi sự kiện.
Mình ngồi cả ngày để lọc ra sự kiện như f5, click vào link, chuyển trang. Nhưng khi thử bắt sự kiện khi user chọn 'reload' khi click chuột phải thì mình thua, vì nó quá khó.

Không dùng Cookie, chỉ dùng Session

justonce's picture

Mình nghĩ là nếu bạn không set trạng thái đăng nhập vào Cookie mà chỉ sử dụng Session thôi thì khi đóng trình duyệt nó sẽ tự động xóa đi thôi.

Không dùng Cookie, chỉ dùng Session

yennhikorea's picture

Mình đồng ý với bạn mình nghĩ là không nên dùng cookie mà chỉ dùng session sẽ tối ưu hơn

why ?

mcjambi's picture

Riêng việc này rất khó, căn bản là nếu truyền session ID qua get thì lại ngại cái session hịacking ! còn nếu làm theo cookie thì lại ... như cũ.
Phương án cho bạn tốt nhất là bắt trường hợp đóng cửa sổ của trình duyệt = java và clear luôn cookie đi là xong ! window.outfocus hoặc gì đó !

Cảnh báo cho người dùng biết

volderman's picture

trước mình cũng nghĩ như vậy để bảo vệ người dùng, mình cũng đã sử dụng autologout và được luôn. Drupal nên vấn đề này cũng không quá khó. Nhưng mình nghĩ vấn đề là ở người dùng, mình chỉ nên cảnh báo những nguy hiểm cho họ biết về tài khoản của họ. Nhiều trang mình muốn giữ lại cookie trên máy cá nhân cho tiện mà.

Tư vấn luật BBL Chuyên thành lập công ty và thành lập doanh nghiệp

Dở hơi à ?

luatviettin's picture

Bạn ơi thế Paypal bạn đăng nhập vào nó chưa ? Hay bạn đã từng đăng nhập vào Google chưa ? Để quên ở tiệm net là do người dùng, hoặc cố ý hay vô tình thì cũng là kệ nó, nói chung là kệ, không cần phải nghĩ giải pháp ...

Might be this module will

phoang's picture

Might be this module will help you out: https://drupal.org/project/persistent_login

Hãy nói “không” với quảng cáo bằng chữ ký

Sử dụng session

saigonlight's picture

Mình đã thử đổi và dùng session nó hiệu quả hơn nhiều, cám ơn bạn nhé

Bạn không nên dùng SESSION

4u4mnet's picture

Bạn không nên dùng SESSION trong hầu hết trường hợp đăng nhập. Một là session viết file lên đĩa, khi dùng VPS yếu thì tèo ngay con VPS. Với nữa đó không phải là cách tối ưu khi mà hacker thích điều này !