2012-11-17 184 views
0

對於一個項目,我創建了一個web應用程序,其中登錄將是一個至關重要的部分。不幸的是,我似乎無法讓會話正常工作,所以登錄根本不會持續。 這裏是我寫的一些簡單的代碼我的Testing/experimentation/debugging page.PHP會話不保存/存儲

這裏是測試頁面的頭部。

<? 
if(!isset($_SESSION)){ 
    session_start(); 
} 
?> 
<!DOCTYPE html> 
... 

這是使用會話數據的代碼。

$_SESSION[0] = $_SESSION[0] + 1; 
echo($_SESSION[0]); 

它應該增加每個訪問,但它並沒有這樣做,就像登錄系統一樣。

這是從phpinfo()功能,如果有幫助的會話設置。

Session Support enabled 
Registered save handlers files user sqlite 
Registered serializer handlers php php_binary wddx 

Directive Local Value Master Value 
session.auto_start Off Off 
session.bug_compat_42 On On 
session.bug_compat_warn On On 
session.cache_expire 180 180 
session.cache_limiter nocache nocache 
session.cookie_domain no value no value 
session.cookie_httponly Off Off 
session.cookie_lifetime 0 0 
session.cookie_path//
session.cookie_secure Off Off 
session.entropy_file no value no value 
session.entropy_length 0 0 
session.gc_divisor 100 100 
session.gc_maxlifetime 1440 1440 
session.gc_probability 1 1 
session.hash_bits_per_character 4 4 
session.hash_function 0 0 
session.name PHPSESSID PHPSESSID 
session.referer_check no value no value 
session.save_handler files files 
session.save_path /tmp /tmp 
session.serialize_handler php php 
session.use_cookies On On 
session.use_only_cookies On On 
session.use_trans_sid 0 0 

回答

1

你不需要!isset來檢查你的會話,只需調用session_start();在處理會話變量的任何頁面的頂部。

根級別的密鑰必須是有效的標識符,所以會話[1]將不起作用,但會話['1']會。

Session documentation還有一些有趣的限定詞。

評論中還有一些更高級的示例:
如果您不具備對register_globals設置的控制:(isset($ _REQUEST ['_ SESSION']))。

+0

啊,謝謝!這似乎是它的問題。我沒有使用字符串標識,而是使用數字索引。謝謝! – Saxophlutist

0

PHP session_start Documentation摘自:

在session_start()創建一個會話或恢復基於經由GET或POST請求通過,或通過cookie傳遞會話標識符的當前一個。

因此,要使用基於Cookie的會話,您應始終在每個腳本的開頭呼叫session_start()以恢復當前會話。不要檢查$_SESSION,PHP不會開始新的會話,但會恢復當前的會話。

0

設置我的會話像這個 - (它是安全的,對我的作品)在頁面

上的日誌:

$_SESSION['fingerprint'] = md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR']); 

//或者乾脆$_SESSION['fingerprint'] = $login['id'] //商店ID爲會話(不安全)

一個配置頁上定義

(詞組)

然後在該在整個網站的其餘頭:

session_start(); 
if ($_SESSION['fingerprint'] != md5($_SERVER['HTTP_USER_AGENT'] . PHRASE . $_SERVER['REMOTE_ADDR'])) {  
    session_destroy(); 
    header('Location: http://website login page/'); 
    exit();  
} 

,然後用你的session['fingerprint']

+0

爲什麼在會話中存儲id不安全? –

0

你能否詳細說明您的問題little.If你有問題,不存在會話的多個頁面,那麼你可能不會在每一頁上呼叫會話。登錄後每一個工作的頁面都必須分開會話,據我所知

+0

這應該是一個評論。 –