導航:首頁 > 編程語言 > php定義session

php定義session

發布時間:2022-05-21 10:21:00

php session是怎樣生成的

session是在伺服器端保持用戶會話數據的一種方法,對應的cookie是在客戶端保持用戶數據。HTTP協議是一種無狀態協議,伺服器響應完之後就失去了與瀏覽器的聯系,最早,Netscape將cookie引入瀏覽器,使得數據可以客戶端跨頁面交換,那麼伺服器是如何記住眾多用戶的會話數據呢?
首先要將客戶端和伺服器端建立一一聯系,每個客戶端都得有一個唯一標識,這樣伺服器才能識別出來。建議唯一標識的方法有兩種:cookie或者通過GET方式指定。默認配置的PHP使用session的時會建立一個名叫」PHPSESSID」的cookie(可以通過php.ini修改session.name值指定),如果客戶端禁用cookie,你也可以指定通過GET方式把session id傳到伺服器(修改php.ini中session.use_trans_sid等參數)。
我們查看伺服器端session.save_path目錄會發現很多類似sess_vv9lpgf0nmkurgvkba1vbvj915這樣的文件,這個其實就是session id 「vv9lpgf0nmkurgvkba1vbvj915″對應的數據。真相就在這里,客戶端將session id傳遞到伺服器,伺服器根據session id找到對應的文件,讀取的時候對文件內容進行反序列化就得到session的值,保存的時候先序列化再寫入。
事實就是這樣,所以如果伺服器不支持session或者你想自定義session,完全可以DIY,通過PHP的uniqid生成永不重復的session id,然後找個地方存儲session的內容即可,你也可以學flickr把session存儲在MySQL資料庫中。

Ⅱ php中session的用法

在使用上是為了能夠在伺服器端保存一個能夠跨頁面使用的變數

//直接在index頁面使用,並給出變數名
$_SESSION['username']='張三';//將張三保存到名為username的session中
//在你的userInfo直接輸出
echo$_SESSION['username'];//輸出名為username的session

在沒有使用框架的時候請在頁首加上session_start()

Ⅲ PHP中$_session是什麼意思怎麼用

1.session.save_handler = files

* 1. session_start()
1. session_start()是session機制的開始,它有一定概率開啟垃圾回收,因為session是存放在文件中,
PHP自身的垃圾回收是無效的,SESSION的回收是要刪文件的,這個概率是根據php.ini的配置決定的,
但是有的系統是 session.gc_probability = 0,這也就是說概率是0,而是通過cron腳本來實現垃圾回收。

session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440//過期時間 默認24分鍾
//概率是 session.gc_probability/session.gc_divisor 結果 1/1000,
//不建議設置過小,因為session的垃圾回收,是需要檢查每個文件是否過期的。
session.save_path = //好像不同的系統默認不一樣,有一種設置是 "N;/path"
//這是隨機分級存儲,這個樣的話,垃圾回收將不起作用,需要自己寫腳本

2. session會判斷當前是否有$_COOKIE[session_name()];session_name()返回保存session_id的COOKIE鍵值,
這個值可以從php.ini找到

session.name = PHPSESSID //默認值PHPSESSID

3. 如果不存在會生成一個session_id,然後把生成的session_id作為COOKIE的值傳遞到客戶端.
相當於執行了下面COOKIE 操作,注意的是,這一步執行了setcookie()操作,COOKIE是在header頭中發送的,
這之前是不能有輸出的,PHP有另外一個函數 session_regenerate_id() 如果使用這個函數,這之前也是不能有輸出的。

setcookie(session_name(),
session_id(),
session.cookie_lifetime,//默認0
session.cookie_path,//默認'/'當前程序跟目錄下都有效
session.cookie_domain,//默認為空
)

4. 如果存在那麼session_id = $_COOKIE[session_name];
然後去session.save_path指定的文件夾里去找名字為'SESS_' . session_id()的文件.
讀取文件的內容反序列化,然後放到$_SESSION中
* 2. 為$_SESSION賦值
比如新添加一個值$_SESSION['test'] = 'blah'; 那麼這個$_SESSION只會維護在內存中,當腳本執行結束的時候,
用把$_SESSION的值寫入到session_id指定的文件夾中,然後關閉相關資源. 這個階段有可能執行更改session_id的操作,
比如銷毀一個舊的的session_id,生成一個全新的session_id.一半用在自定義 session操作,角色的轉換上,
比如Drupal.Drupal的匿名用戶有一個SESSION的,當它登錄後需要換用新的session_id

if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time() - 42000, '/');//舊session cookie過期
}
session_regenerate_id();//這一步會生成新的session_id
//session_id()返回的是新的值

3.寫入SESSION操作
在腳本結束的時候會執行SESSION寫入操作,把$_SESSION中值寫入到session_id命名的文件中,可能已經存在,
可能需要創建新的文件。
* 4. 銷毀SESSION
SESSION發出去的COOKIE一般屬於即時COOKIE,保存在內存中,當瀏覽器關閉後,才會過期,假如需要人為強制過期,
比如 退出登錄,而不是關閉瀏覽器,那麼就需要在代碼里銷毀SESSION,方法有很多,
o 1. setcookie(session_name(), session_id(), time() - 8000000, ..);//退出登錄前執行
o 2. usset($_SESSION);//這會刪除所有的$_SESSION數據,刷新後,有COOKIE傳過來,但是沒有數據。
o 3. session_destroy();//這個作用更徹底,刪除$_SESSION 刪除session文件,和session_id

當不關閉瀏覽器的情況下,再次刷新,2和3都會有COOKIE傳過來,但是找不到數據

2.session.save_handler = user

用戶自定義session處理機制,更加直觀
* session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc');
1.session_start(),
執行open($save_path, $session_name)打開session操作句柄
$save_path 在session.save_handler = files的情況下它就是session.save_path,
但是如果用戶自定的話,這個兩個參數都用不上,直接返回TRUE

執行read($id)從中讀取數據.//這個參數是自動傳遞的就是session_id(),可以通過這個值進行操作。
* 2.腳本執行結束
執行write($id, $sess_data) //兩個參數,很簡單
* 3.假如用戶需要session_destroy()
先執行destroy.在執行第2步

一個實際例子:

//SESSION初始化的時候調用
function open($save_path, $session_name)
{
global $sess_save_path;
$sess_save_path = $save_path;
return(true);
}

//關閉的時候調用
function close()
{
return(true);
}

function read($id)
{
global $sess_save_path;
$sess_file = "$sess_save_path/sess_$id";
return (string) @file_get_contents($sess_file);
}
//腳本執行結束之前,執行寫入操作
function write($id, $sess_data)
{
echo "sdfsf";
global $sess_save_path;

$sess_file = "$sess_save_path/sess_$id";
if ($fp = @fopen($sess_file, "w")) {
$return = fwrite($fp, $sess_data);
fclose($fp);
return $return;
} else {
return(false);
}

}

function destroy($id)
{
global $sess_save_path;

$sess_file = "$sess_save_path/sess_$id";
return(@unlink($sess_file));
}

function gc($maxlifetime)
{
global $sess_save_path;

foreach (glob("$sess_save_path/sess_*") as $filename) {
if (filemtime($filename) + $maxlifetime < time()) {
@unlink($filename);
}
}
return true;
}

Ⅳ PHP中使用類自定義session ,搶奪控制權時的使用__CLASS__設置參數的用法

session_set_save_handler 是表示自定義session的處理方式,否則則使用php內置session處理
(__CLASS__,'open') 是指各個處理方法

open(string $savePath, string $sessionName)
open 回調函數類似於類的構造函數, 在會話打開的時候會被調用。 這是自動開始會話或者通過調用session_start() 手動開始會話 之後第一個被調用的回調函數。 此回調函數操作成功返回 TRUE,反之返回FALSE。
close()
close 回調函數類似於類的析構函數。 在 write 回調函數調用之後調用。 當調用 session_write_close() 函數之後,也會調用 close 回調函數。 此回調函數操作成功返回 TRUE,反之返回 FALSE。
read(string $sessionId)
如果會話中有數據,read 回調函數必須返回將會話數據編碼(序列化)後的字元串。 如果會話中沒有數據,read 回調函數返回空字元串。
在自動開始會話或者通過調用 session_start() 函數手動開始會話之後,PHP 內部調用 read 回調函數來獲取會話數據。 在調用 read 之前,PHP 會調用 open 回調函數。
read 回調返回的序列化之後的字元串格式必須與 write 回調函數保存數據時的格式完全一致。 PHP 會自動反序列化返回的字元串並填充 $_SESSION 超級全局變數。 雖然數據看起來和 serialize() 函數很相似, 但是需要提醒的是,它們是不同的。 請參考: session.serialize_handler。
write(string $sessionId, string $data)
在會話保存數據時會調用 write 回調函數。 此回調函數接收當前會話 ID 以及 $_SESSION 中數據序列化之後的字元串作為參數。 序列化會話數據的過程由 PHP 根據 session.serialize_handler 設定值來完成。
序列化後的數據將和會話 ID 關聯在一起進行保存。 當調用 read 回調函數獲取數據時,所返回的數據必須要和 傳入 write 回調函數的數據完全保持一致。
PHP 會在腳本執行完畢或調用 session_write_close() 函數之後調用此回調函數。 注意,在調用完此回調函數之後,PHP 內部會調用 close 回調函數。
Note:
PHP 會在輸出流寫入完畢並且關閉之後 才調用 write 回調函數, 所以在 write 回調函數中的調試信息不會輸出到瀏覽器中。 如果需要在 write 回調函數中使用調試輸出, 建議將調試輸出寫入到文件。
destroy($sessionId)
當調用 session_destroy() 函數, 或者調用 session_regenerate_id() 函數並且設置 destroy 參數為 TRUE 時, 會調用此回調函數。此回調函數操作成功返回 TRUE,反之返回 FALSE。
gc($lifetime)
為了清理會話中的舊數據,PHP 會不時的調用垃圾收集回調函數。 調用周期由 session.gc_probability 和session.gc_divisor 參數控制。 傳入到此回調函數的 lifetime 參數由 session.gc_maxlifetime 設置。 此回調函數操作成功返回 TRUE,反之返回 FALSE。
create_sid()
當需要新的會話 ID 時被調用的回調函數。 回調函數被調用時無傳入參數, 其返回值應該是一個字元串格式的、有效的會話 ID。

編程語言php中,session的意思以及詳細的介紹(望語言直白些)謝謝啦!

Session,中文譯為「會話」,它的主要用途在於實現對客戶端調用狀態的保持。

要理解這個意思,可以考慮以下的情況:

你訪問某個網站,然後這個網站是需要以會員身份登錄的,那麼當你輸入用戶名、密碼正確登錄後,這個信息怎麼讓下面的網頁得知這個呢?

我們知道,網頁是無狀態的,這句話的意思是:如果你訪問 a 網頁,再訪問 b 網頁,從實質上說,兩個網頁之間如果沒有特別的手段是完全互不相乾的(唯一的聯系可能是這兩個文件都存在一個伺服器上)。

php里的session是超全局數組(php 5以上版本),從這個角度來說,你可以把session看成是保存在內存里,供所有php腳本的訪問的數據塊。

請參看以下相關資料:

關於session

我們知道,用戶訪問一個網站時往往需要瀏覽許多網頁。對於一個通過PHP構築的網站來說,用戶在訪問的過程中需要執行許多的PHP腳本。然而由於HTTP協議自身的特點,用戶每執行一個PHP腳本都需要和Web伺服器重新建立連接。

又由於無狀態記憶的特點,此次連接無法得到上次連接的狀態。這樣,用戶在一個PHP腳本中對一個變數進行了賦值操作,而在另外一個PHP腳本中卻無法得到這個變數的值。例如,用戶在負責登錄的PHP腳本中設置了$user="wind",卻無法在另一個PHP腳本中通過調用$user來獲得「wind」這個值。也就是說,在PHP中無法設置全局變數。每個PHP腳本中所定義的變數都是只在這個腳本內有效的局部變數。

Session解決方案,就是要提供在PHP腳本中定義全局變數的方法,使得這個全局變數在同一個Session中對於所有的PHP腳本都有效。上面我們提到了,Session不是一個簡單的時間概念,一個Session中還包括了特定的用戶和伺服器。因此更詳細地講,在一個Session定義的全局變數的作用范圍,是指這個Session所對應的用戶所訪問的所有PHP。

例如A用戶通過Session定義了一個全局變數$user=「wind」中,而B用戶通過Session定義的全局變數$user=「jane」。那麼在A用戶所訪問的PHP腳本中,$user的值就是wind。

php中的Session與Cookie

在PHP開發中對比起Cookie,session 是存儲在伺服器端的會話,相對安全,並且不像 Cookie 那樣有存儲長度限制,本文簡單介紹 session 的使用。

由於 Session 是以文本文件形式存儲在伺服器端的,所以不怕客戶端修改 Session 內容。實際上在伺服器端的 Session 文件,PHP 自動修改 session 文件的許可權,只保留了系統讀和寫許可權,而且不能通過 ftp 修改,所以安全得多。

對於 Cookie 來說,假設我們要驗證用戶是否登陸,就必須在 Cookie 中保存用戶名和密碼(可能是 md5 加密後字元串),並在每次請求頁面的時候進行驗證。如果用戶名和密碼存儲在資料庫,每次都要執行一次資料庫查詢,給資料庫造成多餘的負擔。因為我們並不能只做一次驗證。為什麼呢?因為客戶端 Cookie 中的信息是有可能被修改的。假如你存儲 $admin 變數來表示用戶是否登陸,$admin 為 true 的時候表示登陸,為 false 的時候表示未登錄,在第一次通過驗證後將 $admin 等於 true 存儲在 Cookie,下次就不用驗證了,這樣對么?錯了,假如有人偽造一個值為 true 的 $admin 變數那不是就立即取的了管理許可權么?非常的不安全。

而 Session 就不同了,Session 是存儲在伺服器端的,遠程用戶沒辦法修改 session 文件的內容,因此我們可以單純存儲一個 $admin 變數來判斷是否登陸,首次驗證通過後設置 $admin 值為 true,以後判斷該值是否為 true,假如不是,轉入登陸界面,這樣就可以減少很多資料庫操作了。而且可以減少每次為了驗證 Cookie 而傳遞密碼的不安全性了(session 驗證只需要傳遞一次,假如你沒有使用 SSL 安全協議的話)。即使密碼進行了 md5 加密,也是很容易被截獲的。

當然使用 session 還有很多優點,比如控制容易,可以按照用戶自定義存儲等(存儲於資料庫)。我這里就不多說了。

Ⅵ php 怎麼使用session

PHP session用法其實很簡單它可以把用戶提交的數據以全局變數形式保存在一個session中並且會生成一個唯一的session_id,這樣就是為了多了不會產生混亂了,並且session中同一瀏覽器同一站點只能有一個session_id,下面我們一起來看看關於session使用方法。
如何使用session,凡是與session有關的,之前必須調用函數session_start();
為session賦值很簡單,如:

<?php
Session_start();
$Name = "這是一個Session例子";
Session_Register("Name");//注意,不要寫成:Session_Register("$Name");
Echo $_SESSION["Name"];
//之後$_SESSION["Name"]為"這是一個Session例子"
?>
在php4.2之後,可以為session直接賦值:
復制代碼 代碼如下:
<?PHP
Session_Start();
$_SESSION["name"]="value";
?>

Ⅶ php中$_session[]是什麼意思

使用php應用session時,將session中的數據存儲在伺服器上,然後通過客戶端傳來的sessionid識別客戶端的信息,並提取信息。
php中的session的常用操作:session的寫入、讀取、注冊與刪除。
session的開始
標記session使用開始的函數是session_start,session_start函數用於初始化session變數。語法如下:
session_start();
返回值為true。
session的寫入和讀取
在php中,session的使用是通過預定義數組$_session的調用和讀取來完成。
在網站的頁面中,在注冊頁面對$_session數組進行賦值,在其他的頁面中對$_session數組進行讀取。
注冊頁面中的session,例如:
?php
session_start();
$_session['keyword']=
"php";
?
其他頁面中的session,例如:
?php
session_start();
echo
$_session['keyword'];
?
依次運行,結果是:
php

Ⅷ php中session概念理解知道的請進

根據我個人的理解,session無非就以下三點,不知道對你有沒有幫助

(1)Session:在計算機中,尤其是在網路應用中,稱為「會話」。

(2)Session直接翻譯成中文比較困難,一般都譯成時域。在計算機專業術語中,Session是指一個終端用戶與交互系統進行通信的時間間隔,通常指從注冊進入系統到注銷退出系統之間所經過的時間。

(3)Session解決方案,就是要提供在PHP腳本中定義全局變數的方法,使得這個全局變數在同一個Session中對於所有的PHP腳本都有效。

Ⅸ php 方法里定義的session怎麼獲取不到

這個問題是你的頁面沒有關聯
比如你有a.php b.php 和c.php
你在a.php裡面使用session,那麼b.php和c.php肯定是取不到session的啦
你這樣,把a.php作為公共頁面
你用b.php引用a.php
c.php也引用a.php
然後你在a.php使用session,b和c就都能取到session
簡單的說, 你要使用session,必須這幾個頁面有關聯

閱讀全文

與php定義session相關的資料

熱點內容
生意不忙怎麼解壓 瀏覽:500
歡太健康app在哪裡下載 瀏覽:488
androidtools使用教程 瀏覽:971
十天突破雅思口語pdf劍9 瀏覽:295
李誕笑場pdf 瀏覽:265
自用紙巾做解壓筆 瀏覽:129
銀行流水解壓碼是多少 瀏覽:895
百度哪個app好用 瀏覽:316
115廣告聯盟源碼 瀏覽:494
聯通app簽到源碼 瀏覽:680
怎麼連接另一個伺服器的資料庫 瀏覽:742
貓盤洗白命令 瀏覽:844
168api源碼 瀏覽:967
不同地方的文件伺服器如何通信 瀏覽:599
自己電腦上搭建ftp伺服器地址 瀏覽:977
程序員的秋招秘籍 瀏覽:821
單片機國內外研究現狀 瀏覽:308
gta5如何進千人真實伺服器 瀏覽:996
電腦html壁紙源碼 瀏覽:726
c語言返回命令 瀏覽:933