您在這裡

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

ddt's 的頭像
ddt 在 2007-02-01 (四) 14:13 發表

最近剛開始試著用的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... (這應該不算好事)

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.
這個設定應該可以解決你的問題.

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

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

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

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

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

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

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

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

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

可能沒設定好,尤其是 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.

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

至於想要一關瀏灠器就直接被登出。應該是去改 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
後來換了新一點的版本就正常了。

我只是一個撰碼員,靠寫程式過活。
自從 Drupal 在 4.7 版的時候知道他的存在,但是後來跳去其它程式語言很久沒回來。
變成 D5 比較熟,D6 知道一點,D7 還在學的狀況…

詢問如果想於登入的部份要帶出uid的session的話…我要改的是user的模組嘛?它的登入session是寫在裡面的嘛?

心中常存善解、包容、感思、知足、惜福 (靜思語錄)

人人把心中的愛發揮出來,就能凝聚善的福業,形成善的循環。 (靜思語錄)

在user模組中的user.module裡加入了以下的方式想印出session
結果是array ( )空值

<?php
print_r($_SESSION);
?>

也試過於drupal同一資料夾下另放一頁測來印session~的值出來
結果也為空

心中常存善解、包容、感思、知足、惜福 (靜思語錄)

人人把心中的愛發揮出來,就能凝聚善的福業,形成善的循環。 (靜思語錄)