『壹』 php 怎麼設置session 的值永不過期
把sessionID存到客戶端cookie里試試呢
<?php
session_start();//啟動Session
$_SESSION['count'];//注冊Session變數Count
isset($PHPSESSID)?session_id($PHPSESSID):$PHPSESSID=session_id();
//如果設置了$PHPSESSID,就將SessionID賦值為$PHPSESSID,否則生成SessionID
$_SESSION['count']++;//變數count加1
setcookie('PHPSESSID',$PHPSESSID,time()+3156000);//儲存SessionID到Cookie中
//echo$count;//顯示Session變數count的值
?>
『貳』 php網站的session 在伺服器端是如何給客戶端分配sessionid的
在PHP.INI裡面有一項session.save_path,就是設置session保存位置的。
session是通過cookie來實現的,當瀏覽器訪問一個頁面時,php發現在cookie裡面沒有sessionid這個值,就會產生一個sessionid出來,同時對應一個伺服器裡面的session文件。然後通過cookie傳給瀏覽器(通過cookie),下次瀏覽器再訪問頁面的時候,就會把這個sessionid給帶上(也是cookie),然後php通過這個cookie找到對應的session文件,讀取session的值。
也就是說如果用戶關了cookie那session就用不了了。
以上就是session的原理,不過一般來說你也不需要了解它。
『叄』 php Session 設置問題
使用到session時,取值還是賦值都要開啟session_start()的
time()>$_SESSION['name'] + 1200這是什麼意思,是想要當時間超過session保存的數據的時間嗎,
不用了吧 如果只是文件session寫入的話可以在伺服器配置的session.gc_probability = 1
session.gc_divisor = 1
session.gc_maxlifetime = 10
這幾個參改寫中
你的session_id 是通過cookie傳遞的吧 如果打開一新頁面沒有得到已注冊的值,session賦值失敗,還有一種可能就是session.cookie_lifetime = 0問題 這值為0的話瀏覽器被重啟cookie保存的session_id丟失
『肆』 php中「session_id()」是什麼意思
session_id()
session_id() 存取目前 session 代號。
語法: string session_id(string [id]);
本函數可取得或者重新配置目前存放 Session 的代號。若無參數 id 則表示只有取得目前 Session 的代號,加上參數則表示將 Session 代號設成新指定的 id。輸入及返回均為字元串。
輸出 session_id()
<?php
session_start();
echo session_id();
// 輸出 dqr58dnuqj2gufvg4o3tmjb9v4
?>
設置 session_id()
<?php
session_id("NowaMagic");
session_start();
echo session_id();
// 輸出 NowaMagic
?>
『伍』 php 如何設置sessionid的有效期
ini_set('session.gc_maxlifetime',20);//20s
用session.gc_maxlifetime來設置
『陸』 用PHP怎麼在session里存多個id
這個你不用擔心,每個session都有唯一的session_id,每次生成session,php都會自動生成1條唯一的session
session_id是不會列印出來的
只能另行輸出 echo session_id()
或者可以:
Session 的工作機制是:為每個訪問者創建一個唯一的 id (UID),並基於這個 UID 來存儲變數。UID 存儲在 cookie 中,亦或通過 URL 進行傳導。
前序:
首先要明白PHPSESSID看似多次刷新都不會改變其實是沒有刪除本地相關聯的cookie,刪除的方法
session_destroy();//刪除伺服器端的session文件
setcookie(session_name(),'',time()-3600,'/');//刪除本地相關聯的cookie
session_unset();//清空內存中的cookie或者是$_SESSION = array();
然後再刷新相應的頁面你就會看到PHPSESSID會發生變化了,根據此可以得:如果session文件已經創建則不重新生成PHPSESSID,否則需要重新生成,生成規則,就看下邊嘍……!
--------------------------------------------------------------------------------------------------------------------------------------
現在經過測試應該是不是檢測session文件是否存在,而是檢測PHPSESSID的cookie是否存在並且是否未過期!特此更正!
------------------------------------------------------------------------------------------------
可能PHP開發者心中多少都思考過這么兩個問題:
種植在客戶端瀏覽器中的PHPSESSIONID會出現重復嗎?
PHPSESSIONID安全性如何,有沒可能被黑客輕易的仿造呢?
帶上這個問題,我稍微注意了一下PHP的源碼後,疑問也就有了答案。
PHP在使用默認的 session.save_handler = files 方式時,PHPSESSIONID的生產演算法原理如下:
hash_func = md5 / sha1 #可由php.ini配置
PHPSESSIONID = hash_func(客戶端IP + 當前時間(秒)+ 當前時間(微妙)+ PHP自帶的隨機數生產器)
從以上hash_func(*)中的數據采樣值的內容分析,多個用戶在同一台伺服器時所生產的PHPSESSIONID重復的概率極低(至少為百萬份之一),設想,但台動態Web Server能到2000/rps已經很強悍了。
另外,黑客如果要猜出某一用戶的PHPSESSIONID,則他也必須知道「客戶端IP、當前時間(秒、微妙)、隨機數」等數據方可模擬。
以下是截取PHP源碼中PHPSESSIONID實現片段:
gettimeofday(&tv, NULL);
if (
zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void **) &array) == SUCCESS &&
Z_TYPE_PP(array) == IS_ARRAY && zend_hash_find(Z_ARRVAL_PP(array), "REMOTE_ADDR", sizeof("REMOTE_ADDR"), (void **) &token) == SUCCESS)
{
remote_addr = Z_STRVAL_PP(token);
}
spprintf(&buf, 0, "%.15s%ld%ld%0.8F", remote_addr ? remote_addr : "", tv.tv_sec, (long int)tv.tv_usec, php_combined_lcg(TSRMLS_C) * 10);
switch (PS(hash_func))
{
case PS_HASH_FUNC_MD5:
PHP_MD5Init(&md5_context);
PHP_MD5Update(&md5_context, (unsigned char *) buf, strlen(buf));
digest_len = 16;
break;
case PS_HASH_FUNC_SHA1:
PHP_SHA1Init(&sha1_context);
PHP_SHA1Update(&sha1_context, (unsigned char *) buf, strlen(buf));
digest_len = 20;
break;
default:
php_error_docref(NULL TSRMLS_CC, E_ERROR, "Invalid session hash function");
efree(buf);
return NULL;
}
『柒』 php 如何使用cookie安全的保存登錄狀態sessionid
同樣還是將用戶的認證信息保證在一個cookie中,具體如下:
1.cookie名:uid。推薦進行加密,比如MD5('站點名稱'+userid)。
2.cookie值:登錄名|有效時間Expires|hash值。hash值可以由"登錄名+有效時間Expires+用戶密碼(加密後的)的前幾位+salt",salt是保證在伺服器端站點配置文件中的隨機數。
這樣子設計有以下幾個優點:
1.即使資料庫被盜了,盜用者還是無法登錄到系統,因為組成cookie值的salt是保證在伺服器站點配置文件中而非資料庫。
2.如果賬戶被盜了,用戶修改密碼,可以使盜用者的cookie值無效。
3.如果伺服器端的資料庫被盜了,通過修改salt值可以使所有用戶的cookie值無效,迫使用戶重新登錄系統。
4.有效時間Expires可以設置為當前時間+過去時間(比如2天),這樣可以保證每次登錄的cookie值都不一樣,防止盜用者窺探到自己的cookie值後作為後門,長期登錄。
『捌』 php 當瀏覽器禁用cookie怎麼設置session
我們可以拋開cookie使用session,即假定用戶關閉cookie的情況下使用session,其實現途徑有以下幾種:
1、設置php.ini中的session.use_trans_sid = 1或者編譯時打開打開了--enable-trans-sid選項,讓PHP自動跨頁傳遞session id。
2、手動通過URL傳值、隱藏表單傳遞session id。
3、用文件、資料庫等形式保存session_id,在跨頁過程中手動調用。
途徑1舉例說明:
s1.php
<?php
session_start();
$_SESSION[』var1』]="中華人民共和國";
$url="<a href=".""s2.php">下一頁</a>";
echo $url;
?>
s2.php
<?php
session_start();
echo "傳遞的session變數var1的值為:".$_SESSION[』var1』];
?>
『玖』 php中的sessionId是干什麼的
SESSION_ID會話ID。
session_data是編碼會話數據。這個數據是在PHP內部編碼$_SESSION超全局,以序列化字元串,並把它當作這個參數的結果。
請注意會話使用替代序列化方法。
返回值
會話存儲的返回值(通常成功返回 0,失敗返回 1)。