最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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文件,其名稱(chēng)為sessionID,并當(dāng)做cookie的值發(fā)送給瀏覽器。瀏覽器每次訪問(wèn)該服務(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)證,如果用戶(hù)信息存儲(chǔ)在數(shù)據(jù)庫(kù)中,每次都要執(zhí)行一次數(shù)據(jù)庫(kù)查詢(xún),給數(shù)據(jù)庫(kù)造成多余的負(fù)擔(dān)。cookie可以被修改的,所以安全系數(shù)太低。

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

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

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

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

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

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

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

創(chuàng)建 session

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

<?php
session_start();//此函數(shù)沒(méi)有參數(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]的形式來(lái)取值或賦值。

例子:

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

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

讀取 session

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

例子:

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

銷(xiāo)毀 session

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

例子:

<?php
session_start();
session_unregister("username");  //注銷(xiāo) session 某個(gè)變量
session_unset();     //注銷(xiāo) 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ì)話名稱(chēng)

session_name

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

這個(gè)函數(shù)可取得或重新設(shè)置當(dāng)前session的名稱(chēng)。若無(wú)參數(shù)name則表示獲取當(dāng)前session名稱(chēng),加上參數(shù)則表示將session名稱(chēng)設(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)。若無(wú)參數(shù)id則表示只獲取當(dāng)前session的標(biāo)識(shí)號(hào),加上參數(shù)則表示將session的標(biāo)識(shí)號(hào)設(shè)成新指定的id。

設(shè)置 Session 的生存期

setcookie:向客戶(hù)端發(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)用。
如果客戶(hù)端使用 IE 6.0 , session_set_cookie_params(); 函數(shù)設(shè)置 Cookie 會(huì)有些問(wèn)題,所以我們還是手動(dòng)調(diào)用 setcookie 函數(shù)來(lái)創(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 '登記的用戶(hù):'.$_SESSION['username'];  //登記的用戶(hù):nostop  讀取Session變量

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

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

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

相關(guān)文章

  • PHP實(shí)現(xiàn)查詢(xún)兩個(gè)數(shù)組中不同元素的方法

    PHP實(shí)現(xiàn)查詢(xún)兩個(gè)數(shù)組中不同元素的方法

    這篇文章主要介紹了PHP實(shí)現(xiàn)查詢(xún)兩個(gè)數(shù)組中不同元素的方法,涉及PHP數(shù)組差集運(yùn)算與數(shù)組合并的相關(guān)技巧,需要的朋友可以參考下
    2016-02-02
  • PHP正則的Unknown Modifier錯(cuò)誤解決方法

    PHP正則的Unknown Modifier錯(cuò)誤解決方法

    PHP正則時(shí)出現(xiàn)Unknown Modifier錯(cuò)誤解決方法
    2010-03-03
  • 深入php list()函數(shù)的詳解

    深入php list()函數(shù)的詳解

    本篇文章是對(duì)php中的list()函數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • php自定義函數(shù)實(shí)現(xiàn)統(tǒng)計(jì)中文字符串長(zhǎng)度的方法小結(jié)

    php自定義函數(shù)實(shí)現(xiàn)統(tǒng)計(jì)中文字符串長(zhǎng)度的方法小結(jié)

    這篇文章主要介紹了php自定義函數(shù)實(shí)現(xiàn)統(tǒng)計(jì)中文字符串長(zhǎng)度的方法,結(jié)合實(shí)例形式總結(jié)分析了php針對(duì)中文的判定、編碼與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • 如何在PHP中使用數(shù)組

    如何在PHP中使用數(shù)組

    這篇文章主要介紹了如何在PHP中使用數(shù)組,文中講解非常細(xì)致,代碼幫助大家更好的參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • PHP將進(jìn)程作為守護(hù)進(jìn)程的方法

    PHP將進(jìn)程作為守護(hù)進(jìn)程的方法

    這篇文章主要介紹了PHP將進(jìn)程作為守護(hù)進(jìn)程的方法,實(shí)例分析了php中守護(hù)進(jìn)程的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • 盤(pán)點(diǎn)PHP和ASP.NET的10大對(duì)比!

    盤(pán)點(diǎn)PHP和ASP.NET的10大對(duì)比!

    本文主要針對(duì)開(kāi)源 PHP 和非開(kāi)源的 ASP.NET 在性能、成本、可擴(kuò)展性,技術(shù)支持和復(fù)雜性等方面進(jìn)行比較,感興趣的小伙伴們可以參考一下
    2015-12-12
  • PHP中如何使用Redis接管文件存儲(chǔ)Session詳解

    PHP中如何使用Redis接管文件存儲(chǔ)Session詳解

    這篇文章主要給大家介紹了關(guān)于在PHP中如何使用Redis接管文件存儲(chǔ)Session的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • php設(shè)置編碼格式的方法

    php設(shè)置編碼格式的方法

    最近需要用到iconv函數(shù)把抓取來(lái)過(guò)的utf-8編碼的頁(yè)面轉(zhuǎn)成gb2312, 發(fā)現(xiàn)只有用iconv函數(shù)把抓取過(guò)來(lái)的數(shù)據(jù)一轉(zhuǎn)碼數(shù)據(jù)就會(huì)無(wú)緣無(wú)故的少一些。
    2013-03-03
  • php類(lèi)常量用法實(shí)例分析

    php類(lèi)常量用法實(shí)例分析

    這篇文章主要介紹了php類(lèi)常量用法,實(shí)例分析了php中類(lèi)常量的概念、特性與相關(guān)使用技巧,需要的朋友可以參考下
    2015-07-07

最新評(píng)論

和静县| 桐梓县| 锡林浩特市| 鄂托克前旗| 卢氏县| 迭部县| 英山县| 无极县| 修水县| 本溪| 黄冈市| 神池县| 南陵县| 北京市| 桐城市| 霞浦县| 洛宁县| 桓台县| 康乐县| 合作市| 合江县| 鄯善县| 正定县| 景东| 拜泉县| 丰台区| 南木林县| 鄂托克旗| 滦南县| 曲阳县| 同仁县| 潞西市| 楚雄市| 景洪市| 海阳市| 屏边| 江孜县| 横峰县| 平度市| 酒泉市| 钦州市|