欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP Session機(jī)制簡(jiǎn)介及用法

 更新時(shí)間:2014年08月19日 08:40:46   投稿:hebedich  
這篇文章主要介紹了PHP Session機(jī)制簡(jiǎn)介及用法,需要的朋友可以參考下

當(dāng)服務(wù)器創(chuàng)建了一個(gè)session(session_start()),服務(wù)器將會(huì)在服務(wù)器的指定文件夾下創(chuàng)建一個(gè)session文件,其名稱為sessionID,并當(dāng)做cookie的值發(fā)送給瀏覽器。瀏覽器每次訪問該服務(wù)器時(shí)便會(huì)帶著這個(gè)cookie,服務(wù)器便會(huì)識(shí)別改sessionID,找到相應(yīng)的session文件。該文件中存放了若干鍵值對(duì)。該session文件所存放的文件夾可以在配置文件php,ini中修改。

cookie 每次請(qǐng)求頁(yè)面的時(shí)候進(jìn)行驗(yàn)證,如果用戶信息存儲(chǔ)在數(shù)據(jù)庫(kù)中,每次都要執(zhí)行一次數(shù)據(jù)庫(kù)查詢,給數(shù)據(jù)庫(kù)造成多余的負(fù)擔(dān)。cookie可以被修改的,所以安全系數(shù)太低。

session是存儲(chǔ)在服務(wù)器端面的會(huì)話,相對(duì)安全,并且不像Cookie那樣有存儲(chǔ)長(zhǎng)度限制。由于Session是以文本文件形式存儲(chǔ)在服務(wù)器端的,所以不怕客戶端修改Session內(nèi)容。實(shí)際上在服務(wù)器端的Session文件,PHP自動(dòng)修改session文件的權(quán)限,只保留了系統(tǒng)讀和寫權(quán)限,而且不能通過ftp修改,所以安全得多。

對(duì)于 Cookie 來說,假設(shè)我們要驗(yàn)證用戶是否登陸,就必須在 Cookie 中保存用戶名和密碼(可能是 md5 加密后字符串),并在每次請(qǐng)求頁(yè)面的時(shí)候進(jìn)行驗(yàn)證。

如果用戶名和密碼存儲(chǔ)在數(shù)據(jù)庫(kù),每次都要執(zhí)行一次數(shù)據(jù)庫(kù)查詢,給數(shù)據(jù)庫(kù)造成多余的負(fù)擔(dān)。因?yàn)槲覀儾⒉荒?只做一次驗(yàn)證。為什么呢?

因?yàn)榭蛻舳?Cookie 中的信息是有可能被修改的。假如你存儲(chǔ) $admin 變量來表示用戶是否登陸,$admin 為 true 的時(shí)候表示登陸,為 false 的時(shí)候表示未登錄,在第一次通過驗(yàn)證后將 $admin 等于 true 存儲(chǔ)在 Cookie,下次就不用驗(yàn)證了,這樣對(duì)么?錯(cuò)了,假如有人偽造一個(gè)值為 true 的 $admin 變量那不是就立即取的了管理權(quán)限么?非常的不安全。

而 Session 就不同了,Session 是存儲(chǔ)在服務(wù)器端的,遠(yuǎn)程用戶沒辦法修改 Session 文件的內(nèi)容,因此我們可以單純存儲(chǔ)一個(gè) $admin 變量來判斷是否登陸,首次驗(yàn)證通過后設(shè)置 $admin 值為 true,以后判斷該值是否為 true,假如不是,轉(zhuǎn)入登陸界面,這樣就可以減少很多數(shù)據(jù)庫(kù)操作了。

而且可以減少每次為了驗(yàn)證 Cookie 而傳遞密碼的不安全性了(Session 驗(yàn)證只需要傳遞一次,假如你沒有使用 SSL 安全協(xié)議的話)。即使密碼進(jìn)行了 md5 加密,也是很容易被截獲的。

session 會(huì)話會(huì)為每一個(gè)開啟了 session 會(huì)話的訪問者建立一個(gè)唯一的會(huì)話 ID ,用于識(shí)別用戶。該會(huì)話 ID 可能存儲(chǔ)于用戶電腦的 cookie 內(nèi),也可能通過 URL 來傳遞。而對(duì)應(yīng)的具體 session 值會(huì)存儲(chǔ)于服務(wù)器端,這也是與 cookie 的主要區(qū)別,并且安全性相對(duì)較高。

創(chuàng)建 session

要?jiǎng)?chuàng)建 session 或返回已經(jīng)存在的會(huì)話 ,就必須先使用 session_start() 函數(shù)開啟一個(gè) session 會(huì)話,系統(tǒng)會(huì)分配一個(gè)會(huì)話 ID:

<?php
session_start();//此函數(shù)沒有參數(shù),且返回值均為true。最好將這個(gè)函數(shù)置于最先,而且在它之前不能有任何輸出,否則會(huì)報(bào)警
?>

注冊(cè)session變量

使用 session_register() 函數(shù)注冊(cè)一個(gè) session 變量,成功返回 TRUE ,否則返回 FALSE 。

語(yǔ)法:bool session_register( mixed name [, mixed ...] )

使用 session_register() 函數(shù)可以在目前會(huì)話下注冊(cè)一個(gè)或多個(gè)全局 session 變量。 參數(shù)name就是想要加入的變量名,成功則返回邏輯值true??梢杂?_SESSION[name]或$HTTP_SESSION_VARS[name]的形式來取值或賦值。

例子:

<?php
session_start();
$username = "nostop";
session_register("username");
?>

在該例子中,我們向 session 注冊(cè)了一個(gè)名為 username 的變量,其值為 nostop 。

讀取 session

PHP 內(nèi)置的 $_SESSION 變量可以很方便的訪問設(shè)置的 session 變量。

例子:

<?php
session_start();
echo "登記的用戶名為:".$_SESSION["username"];  //輸出 登記的用戶名為:nostop
?>

銷毀 session

session_unregister()  注銷單個(gè) session 變量
unset($_SESSION['age']); 用于注銷以$_SESSION['age']注冊(cè)的session變量
session_unset()  刪除所有已注冊(cè)的變量
session_destroy() 注銷所有的session變量,并注銷整個(gè) session 會(huì)話

例子:

<?php
session_start();
session_unregister("username");  //注銷 session 某個(gè)變量
session_unset();     //注銷 session 會(huì)話
?>


檢查變量是否被登記為會(huì)話變量

session_is_registered

語(yǔ)法:boobean session_is_registered(string name);

這個(gè)函數(shù)可檢查當(dāng)前的session之中是否已有指定的變量注冊(cè),參數(shù)name就是要檢查的變量名。成功則返回邏輯值true。

例子:

<?php
  session_start();
  if(!session_is_registered("gender")){ //判斷當(dāng)前會(huì)話變量是否注冊(cè)
    session_register("gender");  //注冊(cè)變量
  }
  $gender="女";
  echo $_SESSION['gender']; //女
?>


存取當(dāng)前會(huì)話名稱

session_name

語(yǔ)法:boolean session_name(string [name]);

這個(gè)函數(shù)可取得或重新設(shè)置當(dāng)前session的名稱。若無參數(shù)name則表示獲取當(dāng)前session名稱,加上參數(shù)則表示將session名稱設(shè)為參數(shù)name。

例子:

<?php

$sessionName = session_name();  //取得當(dāng)前 Session 名,默認(rèn)為 PHPSESSID
$sessionID = $_GET[$sessionName];  //取得 Session ID
session_id($sessionID);   //使用 session_id() 設(shè)置獲得的 Session ID
?>

存取當(dāng)前會(huì)話標(biāo)識(shí)號(hào)

session_id

語(yǔ)法:boolean session_id(string [id]);

這個(gè)函數(shù)可取得或重新設(shè)置當(dāng)前存放session的標(biāo)識(shí)號(hào)。若無參數(shù)id則表示只獲取當(dāng)前session的標(biāo)識(shí)號(hào),加上參數(shù)則表示將session的標(biāo)識(shí)號(hào)設(shè)成新指定的id。

設(shè)置 Session 的生存期

setcookie:向客戶端發(fā)送一個(gè) HTTP cookie。

<?php
  session_start
  // 保存一天
  $lifeTime = 24 * 3600;
  setcookie(session_name(), session_id(), time() + $lifeTime, "/");
?>

session_set_cookie_params:設(shè)置 Session 的生存期的,該函數(shù)必須在 session_start() 函數(shù)調(diào)用之前調(diào)用。
如果客戶端使用 IE 6.0 , session_set_cookie_params(); 函數(shù)設(shè)置 Cookie 會(huì)有些問題,所以我們還是手動(dòng)調(diào)用 setcookie 函數(shù)來創(chuàng)建 cookie。

// 保存一天

<?php
  $lifeTime = 24 * 3600;
  session_set_cookie_params($lifeTime);
  session_start();
  $_session["admin"] = true;
?>

設(shè)置 Session 文件的保存路徑

session_save_path() :必須在 session_start() 函數(shù)調(diào)用之前調(diào)用。

<?php
  // 設(shè)置一個(gè)存放目錄
  $savePath = "./session_save_dir/";
  // 保存一天
  $lifeTime = 24 * 3600;
  session_save_path($savePath);
  session_set_cookie_params($lifeTime);
  session_start();
  $_session["admin"] = true;
?>
<?php
session_start();  //啟動(dòng)Session
$username='nostop';
session_register('username');  //注冊(cè)一個(gè)名為username變量
echo '登記的用戶:'.$_SESSION['username'];  //登記的用戶:nostop  讀取Session變量

$_SESSION['age']=23;  //聲明一個(gè)名為age的變量,并賦值
echo '年齡:'.$_SESSION['age']; //年齡:23

session_unregister('username'); //注銷Session變量
echo $_SESSION['username']; //空
echo $_SESSION['age'];//23

unset($_SESSION['age']); //注銷Session變量
echo '登記的用戶:'.$_SESSION['username']; //空
echo '年齡:'.$_SESSION['age']; //空
?>

相關(guān)文章

最新評(píng)論