請教關於登入的設定(停用session.cookie)

最近剛開始試著用的Drupal架網站,裡面需要加一個記錄使用者活動的功能。

遇到的問題是,如果今天我登入進入Drupal網站,沒登出就關閉瀏覽器,下一次(也許是第二天),再連到網站時,網站會回到登入後的畫面。
到網路上查了一些文章,發現似乎是Session.cookie造成的,一個把session id記到cookie的機制。

能夠了解那是一個方便人不用再重新登入的作法,不過如果是在公用電腦上面,前一個使用者習慣不好,直接關了瀏覽器,下一個人用電腦的人,就可以"自動"登入前一個人的帳號。對於使用者的隱私保護似乎不太足夠,而後台的記錄檔也會不正確。

簡單來說,就是怕下一個人"惡搞"上一個人。

爬過文章都沒看到解決的文章(英文不好可能也是原因),想請教的是...

●有沒有方式是可改成只用session記錄登入狀態
(這樣比較符合一般人「看完網頁關瀏覽器就夠了」的操作習慣)
●或是能夠縮短記錄的存活時間
(退而求其次,上一個人關瀏覽器一段時間,記錄就沒了,要重新登入)

--
找文章曾經找到一篇去修改「sites/default/settings.php」裡面的
ini_set('session.cookie_lifetime', 2000000);
我把數字改小,變成...
ini_set('session.cookie_lifetime', 200);
但是一改完存檔,重新整理的結果,是畫面一片白。(看了"網頁原始檔"真的除了基本html標籤,什麼東西也沒有)
重新開apache,重開電腦也沒有用。(我是winXP,灌Appserv)
結果是檔案全砍,順便從5.0升到5.1... (這應該不算好事)

dionysian 的照片

Re: 請教關於登入的設定(停用session.cookie)

automatic logout 模組你可以試看看,他有個功能如下所述:
Browser refresh delta:0
The length of time, in seconds, after a timeout that a browser refresh is forced. Setting this to 0 (zero) disables the browser refresh facility. Using this facility will force a browser refresh and expire the session thus sending the user『s browser to the homepage, in a logged out state.
這個設定應該可以解決你的問題.

ddt 的照片

解決了,謝謝!!

到原文官網找到這個模組,安裝後果然在關瀏覽器的時候自動登出。

順便附上模組的連結,給遇到同樣問題的人。
模組名稱: Automated Logout 模組的Project網頁
支援版本: 5.x, 4.7.x

最後再次謝謝 lee 大大的解答!!

nobody1225 的照片

Re:

各位好!
請問一下,Automated Logout 要如何設定呢?
我的設定是

啟用 Enable module (Uncheck this and save settings to disable auto logout)
其它都沒改

但都用不起來說 (關瀏覽器的時候自動登出)
我的機器是 win server2003 + drupal5.1
謝謝大家的解答

nobody1225 的照片

Re: 請教關於登入的設定(停用session.cookie)

大家好!
請問有人有使用過 Automated Logout 嗎
您們在使用這個模組時,是如何設定的呢?

我的設定是
啟用 Enable module (Uncheck this and save settings to disable auto logout)
其它都沒改
但都用不起來說 (關瀏覽器的時候自動登出)
我的機器是 win server2003 + drupal5.1

一直想用這個模組,所以再問大家一次,抱歉了
先謝謝大家的解答

charlesc 的照片

Re: 請教關於登入的設定(停用session.cookie)

可能沒設定好,尤其是 policy 的部份,有沒有看過模組附的 install/readme.txt ?

Set-up your site policy by role:
You can specify, by role, how users are treated regarding timeout
issues. The three types of policy are :

Enforce: All users in this role have the timeout enforced on them
Exclude: All users in this role do not have the timeout enforced on them
By user: All users in this role have the choice to disable the timeout.

納格髓 的照片

Re:

其實... 這個模組似乎只有自動登出的功能。
也就是說你閒置不動多久它就把你"踢掉",那也就是這個討論區原來發表者所希望的。
「退而求其次,上一個人關瀏覽器一段時間,記錄就沒了,要重新登入」

至於想要一關瀏灠器就直接被登出。應該是去改 Drupal 的設定,在說明怎麼改之前,先說一些 PHP 程式的東西,也許是你不太清楚的部分。如果你很痛恨程式執行的過程,以下這段請跳過。
存網頁資料,因為安全性的考量,後來很多人開始改用 session 來取代傳統的 cookie。
不同的瀏灠器開啟的 session 會有不同的 id 來作識別不同的 session,這個 id 是記在哪裡?? 其實是在 cookie 裡面。
Drupal 的 cookie 是共用的,也就是說兩個視窗用同一個帳號開啟 Drupal ,一個登出... 另一個也會被登出。
因為 cookie 記錄中的 session id 無效了(或是cookie被刪掉)。

所以要一關瀏灠器就登出。應該是去修改, sites/default/setting.php。 強烈建議先備份,改不好整個站就掛了。
找到如下的程式碼:

/**
* PHP settings:
*
* To see what PHP settings are possible, including whether they can
* be set at runtime (ie., when ini_set() occurs), read the PHP
* documentation at http://www.php.net/manual/en/ini.php#ini.list
* and take a look at the .htaccess file to see which non-runtime
* settings are used there. Settings defined here should not be
* duplicated there so as to avoid conflict issues.
*/
ini_set('arg_separator.output',     '&');
ini_set('magic_quotes_runtime',     0);
ini_set('magic_quotes_sybase',      0);
ini_set('session.cache_expire',     200000);
ini_set('session.cache_limiter',    'none');
ini_set('session.cookie_lifetime',  2000000);
ini_set('session.gc_maxlifetime',   200000);
ini_set('session.save_handler',     'user');
ini_set('session.use_only_cookies', 1);
ini_set('session.use_trans_sid',    0);
ini_set('url_rewriter.tags',        '');

把裡session.cookie_lifetime 改成 0,就是關瀏灠器後 cookie 就"過期",也就不能在下一次開瀏灠器的時候被自動登入了。

附記1:
這個方法我試成功後.... 又過了好一段時間。所以記得不是很清楚,所以再次強烈建議先備份 setting.php

附記2:
其實原po ddt 是我的一個朋友,所以我知道他說的意思是什麼。
(謎之聲: 那就是你本人吧!)
痾... 好吧!! 這個帳號現在沒有在用了... 如果站長大人不覺得麻煩,可以把他給砍了。免得占用寶貴的資料庫空間。

附記3:
原來為什麼改 session.cookie_lifetime 會失敗,那是更久之前的事情了,我真的想不起來。
不過那時候用的 appserv 太舊,中文化之後網站也會掛掉。= =a
後來換了新一點的版本就正常了。

nobody1225 的照片

Re: 請教關於登入的設定(停用session.cookie)

您好厲害
真是詳盡的回答!
謝謝您了,有人討論真好!

charlesc 的照片

Re: 請教關於登入的設定(停用session.cookie)

推謎之聲 :)
解答好,收藏起來!

RSS feed