欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

PHP5之session完全篇

系統(tǒng) 2745 0
1. 什么是 session?
Session 的中文譯名叫做 會(huì)話 ,其本來的含義是指有始有終的一系列動(dòng)作 / 消息,比如打電話時(shí)從拿起電話撥號(hào)到掛斷電話這中間的一系列過程可以稱之為一個(gè) session 。目前社會(huì)上對(duì) session 的理解非常混亂:有時(shí)候我們可以看到這樣的話 在一個(gè)瀏覽器會(huì)話期間, ...” ,這里的會(huì)話是指從一個(gè)瀏覽器窗口打開到關(guān)閉這個(gè)期間; 也可以看到 用戶(客戶端)在一次會(huì)話期間 這樣一句話,它可能指用戶的一系列動(dòng)作(一般情況下是同某個(gè)具體目的相關(guān)的一系列動(dòng)作,比如從登錄到選購(gòu)商品到結(jié)賬登出這樣一個(gè)網(wǎng)上購(gòu)物的過程;然而有時(shí)候也可能僅僅是指一次連接;其中的差別只能靠上下文來推斷了。
然而當(dāng) session 一詞與網(wǎng)絡(luò)協(xié)議相關(guān)聯(lián)時(shí),它又往往隱含了 面向連接 / 保持狀態(tài) 這樣兩個(gè)含義, 面向連接 指的是在通信雙方在通信之前要先建立一個(gè)通信的渠道,比如打電話,直到對(duì)方接了電話通信才能開始。 保持狀態(tài) 則是指通信的一方能夠把一系列的消息關(guān)聯(lián)起來,使得消息之間可以互相依賴,比如一個(gè)服務(wù)員能夠認(rèn)出再次光臨的老顧客并且記得上次這個(gè)顧客還欠店里一塊錢。這一類的例子有 一個(gè) TCP session” 或者 一個(gè) POP3 session”
鑒于這種混亂已不可改變,要為 session 下個(gè)定義就很難有統(tǒng)一的標(biāo)準(zhǔn)。而在閱讀 session 相關(guān)資料時(shí),我們也只有靠上下文來推斷理解了。不過我們可以這樣理解:例如我們打電話,從撥通的那一刻起到掛斷電話期間,因?yàn)殡娫捯恢北3种油ǖ臓顟B(tài), 所以把這種接通的狀態(tài)叫做 session 。它是訪客與整個(gè)網(wǎng)站交互過程中一直存在的公有變量,在客戶端不支持 COOKIE 的時(shí)候,為了保證數(shù)據(jù)正確、安全,就采用 SESSION 變量。訪問網(wǎng)站的來客會(huì)被分配一個(gè)唯一的標(biāo)識(shí)符,即所謂的會(huì)話 ID 。它要么存放在客戶端的 cookie ,要么經(jīng)由 URL 傳遞。
SESSION
的發(fā)明填補(bǔ)了 HTTP 協(xié)議的局限: HTTP 協(xié)議被認(rèn)為是無狀態(tài)協(xié)議,無法得知用戶的瀏覽狀態(tài),當(dāng)它在服務(wù)端完成響應(yīng)之后,服務(wù)器就失去了與該瀏覽器的聯(lián)系。這與 HTTP 協(xié)議本來的目的是相符的,客戶端只需要簡(jiǎn)單的向服務(wù)器請(qǐng)求下載某些文件,無論是客戶端還是服務(wù)器都沒有必要紀(jì)錄彼此過去的行為,每一次請(qǐng)求之間都是獨(dú)立的,好比一個(gè)顧客和一個(gè)自動(dòng)售貨機(jī)或者一個(gè)普通的(非會(huì)員制)大賣場(chǎng)之間的關(guān)系一樣。
因此通過 SESSION(cookie 是另外一種解決辦法 ) 記錄用戶的有關(guān)信息,以供用戶再次以此身份對(duì) web 服務(wù)器提起請(qǐng)求時(shí)作確認(rèn)。會(huì)話的發(fā)明使得一個(gè)用戶在多個(gè)頁(yè)面間切換時(shí)能夠保存他的信息。網(wǎng)站編程人員都有這樣的體會(huì),每一頁(yè)中的變量是不能在下一頁(yè)中使用的 ( 雖然 form url 也可以實(shí)現(xiàn),但這都是非常不理想的辦法 ) ,而 SESSION 中注冊(cè)的變量就可以作為全局變量使用了。
那么 SESSION 到底有什么用處呢?網(wǎng)上購(gòu)物時(shí)大家都用過購(gòu)物車,你可以隨時(shí)把你選購(gòu)的商品加入到購(gòu)物車中,最后再去收銀臺(tái)結(jié)帳。在整個(gè)過程中購(gòu)物車一直扮演著臨時(shí)存貯被選商品的角色,用它追蹤用戶在網(wǎng)站上的活動(dòng)情況,這就是 SESSION 的作用,它可以用于用戶身份認(rèn)證,程序狀態(tài)記錄,頁(yè)面之間參數(shù)傳遞等。
SESSION
的實(shí)現(xiàn)中采用 COOKIE 技術(shù), SESSION 會(huì)在客戶端保存一個(gè)包含 session_id(SESSION 編號(hào) ) COOKIE ;在服務(wù)器端保存其他 session 變量,比如 session_name 等等。當(dāng)用戶請(qǐng)求服務(wù)器時(shí)也把 session_id 一起發(fā)送到服務(wù)器,通過 session_id 提取所保存在服務(wù)器端的變量,就能識(shí)別用戶是誰了。同時(shí)也不難理解為什么 SESSION 有時(shí)會(huì)失效了。
當(dāng)客戶端禁用 COOKIE 時(shí) ( 點(diǎn)擊 IE 中的 工具 ”—“Internet 選項(xiàng) ,在彈出的對(duì)話框里點(diǎn)擊 安全 ”—“ 自定義級(jí)別 項(xiàng),將 允許每個(gè)對(duì)話 COOKIE” 設(shè)為禁用 ) session_id 將無法傳遞,此時(shí) SESSION 失效。不過 PHP5 linux/unix 平臺(tái)可以自動(dòng)檢查 cookie 狀態(tài),如果客戶端設(shè)置了禁用,則系統(tǒng)自動(dòng)把 session_id 附加到 url 上傳遞。 windows 主機(jī)則無此功能。

2. Session 常見函數(shù)及用法?
Session_start() 開始一個(gè)會(huì)話或者返回已經(jīng)存在的會(huì)話。
說明:這個(gè)函數(shù)沒有參數(shù),且返回值均為 true 。如果你使用基于 cookie session(cookie-based sessions), 那么在使用 Session_start() 之前瀏覽器不能有任何輸出,否則會(huì)發(fā)生以下錯(cuò)誤:
Warning: Cannot send session cache limiter - headers already sent (output started at /usr/local/apache/htdocs/cga/member/1.php:2)…………
你可以在 php.ini 里啟動(dòng) session.auto_start=1 ,這樣就無需每次使用 session 之前都要調(diào)用 session_start() 。但啟用該選項(xiàng)也有一些限制,如果確實(shí)啟用了 session.auto_start ,則不能將對(duì)象放入會(huì)話中,因?yàn)轭惗x必須在啟動(dòng)會(huì)話之前加載以在會(huì)話中重建對(duì)象。
請(qǐng)求結(jié)束后所有注冊(cè)的變量都會(huì)被序列化。已注冊(cè)但未定義的變量被標(biāo)記為未定義。在之后的訪問中這些變量也未被會(huì)話模塊定義,除非用戶以后定義它們。
警告:有些類型的數(shù)據(jù)不能被序列化因此也就不能保存在會(huì)話中。包括 resource 變量或者有循環(huán)引用的對(duì)象(即某對(duì)象將一個(gè)指向自己的引用傳遞給另一個(gè)對(duì)象)。
注冊(cè) SESSION 變量:
PHP5 使用 $_SESSION[‘xxx’]=xxx 注冊(cè) SESSION 全局變量。和 GET POST COOKIE 的使用方法相似。
注意: session_register() session_unregister session_is_registered php5 下不再使用,除非在 php.ini 里把 register_globle 設(shè)為 on ,不過出于安全考慮,強(qiáng)烈建議關(guān)閉 register_globle HTTP_SESSION_VARS 也不提倡使用了,官方建議用 $_SESSION 代替之。例如:
Page1.php
<? php
Session_start (); // 使用SESSION前必須調(diào)用該函數(shù)。
$_SESSION [‘name’] = ”我是Sunglow ! ”; // 注冊(cè)一個(gè)SESSION變量
$_SESSION [‘passwd’] = ”mynameisSunglow”;
$_SESSION [‘ time ’] = time ();
echo ' <br/><ahref="page2.php">通過COOKIE傳遞SESSION</a> ' ; // 如果客戶端支持cookie,可通過該鏈接傳遞session到下一頁(yè)。
echo ' <br/><ahref="page2.php? ' . SID . ' ">通過URL傳遞SESSION</a> ' ; // 客戶端不支持cookie時(shí),使用該辦法傳遞session.
?>

Page2.php
<? php
session_start ();
echo $_SESSION [ ' name ' ]; //
echo $_SESSION [ ' passwd ' ]; //
echo date ( ' YmdH:i:s ' , $_SESSION [ ' time ' ]);
echo ' <br/><ahref="page1.php">返回山一頁(yè)</a> ' ;
?>


有兩種方法傳遞一個(gè)會(huì)話 ID
cookie
URL
參數(shù)
會(huì)話模塊支持這兩種方法。 cookie 更優(yōu)化,但由于不總是可用,也提供替代的方法。第二種方法直接將會(huì)話 ID 嵌入到 URL 中間去。
PHP
可以透明地轉(zhuǎn)換連接。除非是使用 PHP 4.2 或更新版本,需要手工在編譯 PHP 時(shí)激活。在 Unix 下,用 --enable-trans-sid 配置選項(xiàng)。如果此配置選項(xiàng)和運(yùn)行時(shí)選項(xiàng) session.use_trans_sid 都被激活 ( 修改 php.ini) ,相對(duì) URI 將被自動(dòng)修改為包含會(huì)話 ID
session_id
session_id() 用于設(shè)定或取得當(dāng)前 session_id php5 中既可以使用 session_id() ,也可以通過附加在 url 上的 SID 取得當(dāng)前會(huì)話的 session_id session_name
如果 session_id() 有具體指定值的話,將取代當(dāng)前的 session_id 值。使用該函數(shù)前必須啟動(dòng)會(huì)話: session_start();
當(dāng)我們使用 session cookies 時(shí),如果指定了一個(gè) session_id() 值,每次啟動(dòng) session_start() 都會(huì)往客戶端發(fā)送一個(gè) cookie 值。不論當(dāng)前 session_id 是否與指定值相等。
session_id()
如果沒有指定值,則返回當(dāng)前 session_id(); 當(dāng)前會(huì)話沒有啟動(dòng)的話,則返回空字符串。
檢查 session 是否存在?
在以往的 php 版本中通常使用 session_is_register() 檢查 session 是否存在,如果您使用 $_SESSION[‘XXX’]=XXX 來注冊(cè)會(huì)話變量,則 session_is_register() 函數(shù)不再起作用。你可以使用
isset($_SESSION[‘xxx’])
來替代。
更改 session_id session_regenerate_id() 更改成功則返回 true ,失敗則返回 false
使用該函數(shù)可以為當(dāng)前 session 更改 session_id ,但不改變當(dāng)前 session 的其他信息。例如:
<? php
session_start ();
$old_sessionid = session_id ();
session_regenerate_id ();
$new_sessionid = session_id ();
echo " 原始SessionID:$old_sessionid<br/> " ;
echo " 新的SessionID:$new_sessionid<br/> " ;
echo " <pre> " ;
print_r ( $_SESSION );
echo " </pre> " ;
?>


session_name() 返回當(dāng)前 session name 或改變當(dāng)前 session name 。如果要改變當(dāng)前 session name ,必須在 session_start() 之前調(diào)用該函數(shù)。注意: session_name 不能只由數(shù)字組成,它至少包含一個(gè)字母。否則會(huì)在每時(shí)每刻都生成一個(gè)新的 session id.
session
改名示例:
<? php
$previous_name = session_name ( " WebsiteID " );
echo " 新的session名為:$previous_name<br/> " ;
?>


如何刪除 session
1 unset ($_SESSION['xxx']) 刪除單個(gè) session unset($_SESSION['xxx']) 用來 unregister 一個(gè)已注冊(cè)的 session 變量。其作用和 session_unregister() 相同。 session_unregister() PHP5 中不再使用,可將之打入冷宮。
unset($_SESSION)
此函數(shù)千萬不可使用,它會(huì)將全局變量 $_SESSION 銷毀,而且還沒有可行的辦法將其恢復(fù)。用戶也不再可以注冊(cè) $_SESSION 變量。
2 $_SESSION=array() 刪除多個(gè) session
3
session_destroy() 結(jié)束當(dāng)前的會(huì)話,并清空會(huì)話中的所有資源。。該函數(shù)不會(huì) unset( 釋放 ) 和當(dāng)前 session 相關(guān)的全局變量 (globalvariables), 也不會(huì)刪除客戶端的 session cookie.PHP 默認(rèn)的 session 是基于 cookie 的,如果要?jiǎng)h除 cookie 的話,必須借助 setcookie() 函數(shù)。
返回值:布爾值。
功能說明:這個(gè)函數(shù)結(jié)束當(dāng)前的 session ,此函數(shù)沒有參數(shù),且返回值均為 true

session_unset()
如果使用了 $_SESSION ,則該函數(shù)不再起作用。由于 PHP5 必定要使用 $_SESSION ,所以此函數(shù)可以打入冷宮了。

下面是 PHP 官方關(guān)于刪除 session 的案例:
<? php
// 初始化session.
session_start ();
/* **刪除所有的session變量..也可用unset($_SESSION[xxx])逐個(gè)刪除。*** */
$_SESSION = array ();
/* **刪除sessinid.由于session默認(rèn)是基于cookie的,所以使用setcookie刪除包含sessionid的cookie.** */
if ( isset ( $_COOKIE [ session_name ()])){
setcookie ( session_name () , '' , time () - 42000 , ' / ' );
}
// 最后徹底銷毀session.
session_destroy ();
?>

由此我們可以得出刪除 Session 的步驟:
session_start()
$_SESSION=array() /unset($_SESSION['xxx'])
session_destroy()
● SESSION 安全 :
會(huì)話模塊不能保證存放在會(huì)話中的信息只能被創(chuàng)建該會(huì)話的用戶看到。根據(jù)其存放的數(shù)據(jù),還需要采取更多措施來主動(dòng)保護(hù)會(huì)話的完整性。
評(píng)估會(huì)話中攜帶的數(shù)據(jù)并實(shí)施附加保護(hù)措施通常要付出代價(jià),降低用戶的方便程度。例如,如果要保護(hù)用戶免于受簡(jiǎn)單的社交策略侵害(注:指在 URL 中顯示的會(huì)話 ID 會(huì)被別人在電腦屏幕上看到,或被別的網(wǎng)站通過 HTTP Referer 得到等),則應(yīng)該啟用 session.use_only_cookies 。此情形下,客戶端必須無條件啟用 cookie ,否則會(huì)話就不工作。
有幾種途徑會(huì)將現(xiàn)有的會(huì)話 ID 泄露給第三方。泄露出的會(huì)話 ID 使第三方能夠訪問所有與指定 ID 相關(guān)聯(lián)的資源。第一, URL 攜帶會(huì)話 ID 。如果連接到外部站點(diǎn),包含有會(huì)話 ID URL 可能會(huì)被存在外部站點(diǎn)的 Referer 日志中。第二,較主動(dòng)的攻擊者可能會(huì)偵聽網(wǎng)段的數(shù)據(jù)包。如果未加密,會(huì)話 ID 會(huì)以明文方式在網(wǎng)絡(luò)中流過。對(duì)此的解決方式是在服務(wù)器上實(shí)施 SSL 并強(qiáng)制用戶使用。
默認(rèn)情況下,所有與特定會(huì)話相關(guān)的數(shù)據(jù)都被存儲(chǔ)在由 INI 選項(xiàng) session.save_path 指 定的目錄下的一個(gè)文件中。對(duì)每個(gè)會(huì)話會(huì)建立一個(gè)文件(不論是否有數(shù)據(jù)與該會(huì)話相關(guān))。這是由于每打開一個(gè)會(huì)話即建立一個(gè)文件,不論是否有數(shù)據(jù)寫入到該文件 中。注意由于和文件系統(tǒng)協(xié)同工作的限制,此行為有個(gè)副作用,有可能造成用戶定制的會(huì)話處理器(例如用數(shù)據(jù)庫(kù))丟失了未存儲(chǔ)數(shù)據(jù)的會(huì)話。
上面介紹函數(shù)下文將會(huì)用到,但還有一些有關(guān) session 的函數(shù)也介紹一下:
session_encode
函數(shù)功能: sesssion 信息編碼
函數(shù)原型: string session_encode(void);
返回值:字符串
功能說明:返回的字符串中包含全局變量中各變量的名稱與值,形式如: a|s:12:"it is a test \";c|s:4:"lala"; a 是變量名 s:12 代表變量 a 的值 "it is a test 的長(zhǎng)度是 12 變量間用分號(hào) ”;” 分隔。
session_decode
函數(shù)功能: sesssion 信息解碼
函數(shù)原型: boolean session_decode (string data)
返回值:布爾值
功能說明:這個(gè)函數(shù)可將 session 信息解碼,成功則返回邏輯值 true
PHP5
不再使用 session_id ,而是把它變成一個(gè)常量 SID ,并保存在 cookie 中。如果客戶端禁用了 cookie php 會(huì)自動(dòng)通過 url 自動(dòng)傳動(dòng)傳遞 SID ,其條件是設(shè)置 php.ini 中的 session.use_trans_sid = 1 。此時(shí)即使客戶端即使禁用了 cookie 也沒關(guān)系了。
strip_tags() 來輸出 SID 以避免 XSS 相關(guān)的攻擊。
Session 跨頁(yè)傳遞問題:
分享到:
評(píng)論

PHP5之session完全篇


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 中文字幕三区 | 欧美一区二区三区播放 | 两性视频久久 | 波多野结衣中文丝袜字幕 | 日韩国产欧美在线观看 | 亚洲中出 | 青青草视频破解版 | 伊人网综合| 久久久久久久久久亚洲 | 亚洲午夜国产精品无卡 | 日本a视频 | 一级欧美黄色片 | 婷婷的久久五月综合先锋影音 | 三黄日本三级在线观看 | 毛片基地看看成人免费 | 午夜激情爱爱 | 精品极品三级久久久久 | 欧美日韩精品一区二区三区蜜桃 | 国产精品每日更新 | 射综合网 | 日韩在线播放第一页 | 亚洲国产精品久久网午夜 | 一卡二卡三免费乱码 | 国产精品成人观看视频国产 | 黄色片的网站 | 国产一区免费在线观看 | 凹凸日日摸日日碰夜夜爽孕妇 | 国产成人精品一区二区三区电影 | 乳欲人妻办公室奶水在线电影国产 | 色伊人网 | 国产精品福利在线观看免费不卡 | 黄色视屏免费观看 | 色94色 成人| 国产自产在线 | 奇米影视亚洲精品一区 | a级粗大硬长爽猛视频免费 潘金莲强完整版 | 久草网在线 | 91麻豆精东果冻天美传媒老狼 | 国产精品123区 | 午夜黄网 | 国产亚洲精彩视频 |