成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

PHP 會話(Session)實現用戶登陸功能

對比起 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 還有很多優點,比如控制容易,可以按照用戶自定義存儲等(存儲于數據庫)。我這里就不多說了。

Session 在 php.ini 是否需要設置呢?一般不需要的,因為并不是每個人都有修改 php.ini 的權限,默認 Session 的存放路徑是服務器的系統臨時文件夾,我們可以自定義存放在自己的文件夾里,這個稍后我會介紹。

開始介紹如何創建 Session。非常簡單,真的。

啟動 Session 會話,并創建一個 $admin 變量:

實例

<?php
//  啟動 Session
session_start();
//  聲明一個名為 admin 的變量,并賦空值。
$_SESSION["admin"] = null;
?>

如果你使用了 Seesion,或者該 PHP 文件要調用 Session 變量,那么就必須在調用 Session 之前啟動它,使用 session_start() 函數。其它都不需要你設置了,PHP 自動完成 Session 文件的創建。

執行完這個程序后,我們可以到系統臨時文件夾找到這個 Session 文件,一般文件名形如:sess_4c83638b3b0dbf65583181c2f89168ec,后面是 32 位編碼后的隨機字符串。用編輯器打開它,看一下它的內容:

admin|N;

一般該內容是這樣的結構:

變量名|類型:長度:值;

并用分號隔開每個變量。有些是可以省略的,比如長度和類型。

我們來看一下驗證程序,假設數據庫存儲的是用戶名和 md5 加密后的密碼:

login.php 文件代碼

<?php
//  表單提交后…
$posts = $_POST;
//  清除一些空白符號
foreach ($posts as $key => $value) {
    $posts[$key] = trim($value);
}
$password = md5($posts["password"]);
$username = $posts["username"];

$query = "SELECT `username` FROM `user` WHERE `password` = ‘$password‘ AND `username` = ‘$username‘";
//  取得查詢結果
$userInfo = $DB->getRow($query);

if (!empty($userInfo)) {
    //  當驗證通過后,啟動 Session
    session_start();
    //  注冊登陸成功的 admin 變量,并賦值 true
    $_SESSION["admin"] = true;
} else {
    die("用戶名密碼錯誤");
}
?>

我們在需要用戶驗證的頁面啟動 Session,判斷是否登陸:

實例

<?php
//  防止全局變量造成安全隱患
$admin = false;
//  啟動會話,這步必不可少
session_start();
//  判斷是否登陸
if (isset($_SESSION["admin"]) && $_SESSION["admin"] === true) {
    echo "您已經成功登陸";
} else {
    //  驗證失敗,將 $_SESSION["admin"] 置為 false
    $_SESSION["admin"] = false;
    die("您無權訪問");
}
?>

是不是很簡單呢?將 $_SESSION 看成是存儲在服務器端的數組即可,我們注冊的每一個變量都是數組的鍵,跟使用數組沒有什么分別。

如果要登出系統怎么辦?銷毀 Session 即可。

實例

<?php
session_start();
//  這種方法是將原來注冊的某個變量銷毀
unset($_SESSION[‘admin’]);
//  這種方法是銷毀整個 Session 文件
session_destroy();
?>

Session 能否像 Cookie 那樣設置生存周期呢?有了 Session 是否就完全拋棄 Cookie 呢?我想說,結合 Cookie 來使用 Session 才是最方便的。

Session 是如何來判斷客戶端用戶的呢?它是通過 Session ID 來判斷的,什么是 Session ID,就是那個 Session 文件的文件名,Session ID 是隨機生成的,因此能保證唯一性和隨機性,確保 Session 的安全。一般如果沒有設置 Session 的生存周期,則 Session ID 存儲在內存中,關閉瀏覽器后該 ID 自動注銷,重新請求該頁面后,重新注冊一個 Session ID。

如果客戶端沒有禁用 Cookie,則 Cookie 在啟動 Session 會話的時候扮演的是存儲 Session ID 和 Session 生存期的角色。

我們來手動設置 Session 的生存期:

實例

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

其實 Session 還提供了一個函數 session_set_cookie_params(); 來設置 Session 的生存期的,該函數必須在 session_start() 函數調用之前調用:

實例

<?php
//  保存一天
$lifeTime = 24 * 3600;
session_set_cookie_params($lifeTime);
session_start();
$_SESSION["admin"] = true;
?>

如果客戶端使用 IE 6.0 , session_set_cookie_params(); 函數設置 Cookie 會有些問題,所以我們還是手動調用 setcookie 函數來創建 cookie。

假設客戶端禁用 Cookie 怎么辦?沒辦法,所有生存周期都是瀏覽器進程了,只要關閉瀏覽器,再次請求頁面又得重新注冊 Session。那么怎么傳遞 Session ID 呢?通過 URL 或者通過隱藏表單來傳遞,PHP 會自動將 Session ID 發送到 URL 上,URL 形如:http://www.test.cn/index.php?PHPSESSID= bba5b2a240a77e5b44cfa01d49cf9669,其中 URL 中的參數 PHPSESSID 就是 Session ID了,我們可以使用 $_GET 來獲取該值,從而實現 Session ID 頁面間傳遞。

實例

<?php
//  保存一天
$lifeTime = 24 * 3600;
//  取得當前 Session 名,默認為 PHPSESSID
$sessionName = session_name();
//  取得 Session ID
$sessionID = $_GET[$sessionName];
//  使用 session_id() 設置獲得的 Session ID
session_id($sessionID);

session_set_cookie_params($lifeTime);
session_start();
$_SESSION[‘admin’] = true;
?>

對于虛擬主機來說,如果所有用戶的 Session 都保存在系統臨時文件夾里,將給維護造成困難,而且降低了安全性,我們可以手動設置 Session 文件的保存路徑,session_save_path() 就提供了這樣一個功能。我們可以將 Session 存放目錄指向一個不能通過 Web 方式訪問的文件夾,當然,該文件夾必須具備可讀寫屬性。

實例

<?php
//  設置一個存放目錄
$savePath = ‘./session_save_dir/’;
//  保存一天
$lifeTime = 24 * 3600;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
$_SESSION[‘admin’] = true;
?>

同 session_set_cookie_params(); 函數一樣,session_save_path() 函數也必須在 session_start() 函數調用之前調用。

我們還可以將數組,對象存儲在 Session 中。操作數組和操作一般變量沒有什么區別,而保存對象的話,PHP 會自動對對象進行序列化(也叫串行化),然后保存于 Session 中。下面例子說明了這一點:

person.php 文件代碼

<?php
class person {
    var $age;
    function output() {
        echo $this->age;
    }
    function setAge($age) {
        $this->age = $age;
    }
}
?>

setage.php 文件代碼

<?php
session_start();
require_once ‘person.php’;
$person = new person();
$person->setAge(21);
$_SESSION[‘person’] = $person;
echo ‘<a href=’output.php‘>check here to output age</a>’;
?>

output.php 文件代碼

<?php
// 設置回調函數,確保重新構建對象。
ini_set(‘unserialize_callback_func’, ‘mycallback’);
function mycallback($classname) {
    include_once $classname . ‘.php’;
}
session_start();
$person = $_SESSION[‘person’];
//  輸出 21
$person->output();
?>

當我們執行 setage.php 文件的時候,調用了 setage() 方法,設置了年齡為 21,并將該狀態序列化后保存在 Session 中(PHP 將自動完成這一轉換),當轉到 output.php 后,要輸出這個值,就必須反序列化剛才保存的對象,又因為在解序列化的時候需要實例化一個未定義類,所以我們定義了以后回調函數,自動包含 person.php 這個類文件,因此對象被重構,并取得當前 age 的值為 21,然后調用 output() 方法輸出該值。

另外,我們還可以使用 session_set_save_handler 函數來自定義 Session 的調用方式。

原文地址:https://www.cnblogs.com/happyforev1/articles/1645916.html

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
公和熄洗澡三级在线观看| 国产精品亚洲一区二区三区| 日韩精品卡2卡3卡4卡5| 精品日产一卡2卡三卡4卡自拍| 久久精品国产99精品亚洲| 国产白丝护士AV在线网站| 古装激情偷乱人伦视频| 国产精品国产高清国产AV| 皇上撞着小公主的小说叫什么| 久久久国产精品ⅤA麻豆| 男人做一次爱能舒服多久| 日本japanese人妻护士| 男人强撕开奶罩揉捏我奶头视频 | 久久99国产精品尤物| 国产精品久久久久精品日日| 好硬啊一进一得太深了A片69 | 日韩欧美亚洲国产精品字幕久久久 | 在线观看特色大片免费网站| 八戒八戒神马影院在线观看1| 国产ΑV在线ΑV天堂AⅤ国产| 成人免费无码A毛片| 国产九九久久99精品影院| 久久精品国产免费观看三人同眠| 欧美激情在线播放| 天堂√中文最新版在线| 亚洲人成影院在线无码按摩店 | 少妇人妻88久久中文字幕| 亚洲国产成人A精品不卡在线| 无遮挡啪啪摇乳动态图GIF| 亚洲人成电影网站色WWW| AV无码久久久久不卡网站下载 | 五月天久久久噜噜噜久久| 亚洲伊人伊成久久人综合网| VPSWINDOWS另类乱| 国产女人高潮抽搐喷水视频| 国产精品久久久久久麻豆一区 | 亚洲中文自拍另类AV片| 被驯服的人妻佐佐木明希| 国产又粗又猛又爽又黄的视频在线| 廖承宇做受被C22分钟视频| 久久夜色精品国产噜噜噜亚洲AV| 欧亚精品一区三区免费| 亚洲 国产 制服 丝袜 一区| 亚洲AV深夜高潮无码成人| 中文字幕精品无码一区二区三区| 丰满的少妇XXXXX人妻| 精品国产乱码一区二区三区APP| 欧美疯狂性受XXXXX喷水| 无码A级毛片视频| 在线播放人成视频观看| 国产成人无码AV麻豆| 旧里番美熟妇1一2集| 深夜成人毛片天堂| 在线观看亚洲AV| 国产精品99无码一区二区| 久青草国产97香蕉在线视频| 婷婷成人综合激情在线视频播放| 越看越湿的啪啪的小说免费| 国产精品久久久久一区二区三区| 男女体裸下00动态视频| 亚洲AV无码久久精品色欲| JIZZJIZZ亚洲日本少妇| 精品人妻系列无码人妻漫画| 久久婷婷成人综合色| 天美传媒国色天香乱码| 18禁免费无码无遮挡不卡网站| 国产免费一区二区三区在线观看| 欧美精品人妻AⅤ在线观视频免费| 亚洲成av人无码| 催眠性指导OVA1一6集| 美女扒开腿让男人桶爽30分钟| 欧美精品第1页WWW| 亚洲国产精品无码久久一线| 东北老熟女对白XXXⅩHD| 蜜桃AV麻豆AV天美AV| 亚洲AV永久无码精品| 东北往事之黑道风云20年| 免费无码又爽又刺激高潮| 少妇人妻14页_麻花色| 最新亚洲人成无码网WWW电影| 含羞草传媒免费进入APP老版本| 人妻少妇久久中文字幕| 在床上拔萝卜又疼又叫什么症状| 国内精品久久久久精品电影| 色狠狠久久AV五月综合| AV无码免费岛国动作片片段欣赏| 精品一区二区三区在线视频 | 377人体粉嫩噜噜噜| 精品无码乱码AV| 无码专区6080YY免费视频| 成本人H无码播放私人影院| 你看桌子上都是你流的| 亚洲综合日韩久久成人AV| 国产午夜福利100集发布| 少妇AV一区二区三区无码久久| CSGO白嫖网站| 免费无码成人AV片在线| 亚洲另类激情综合偷自拍图片| 国产乱妇乱子在线视频| 色窝窝无码一区二区三区色欲| 亚洲高清国产拍精品26U| 高清成人爽A毛片免费| 欧美粗大无套GAY| 伊人久久大香线蕉AV波多野结衣| 极品无码国模国产在线观看| 亚欧免费无码AⅤ在线观看蜜桃| 国产成人精品久久一区二区三区| 人人妻人人爽人人添少妇| 中文无码热在线视频| 久久AV无码ΑV高潮ΑV喷吹| 亚洲成人AV在线| 国产亚洲无线码一区二区| 无码熟妇人妻AⅤ在线电影| 国产69精品久久久久99尤物| 欧洲Av无码放荡人妇网站| 真实国产乱子伦沙发睡午觉 | 97人妻碰碰碰久久久久禁片| 国产精品泄火熟女| 熟女少妇a性色生活片毛片| 大胸美女污污污WWW网站| 人人澡人摸人人添| 八戒八戒在线WWW观看| 人妻蜜と1~4中文字幕月野定规| 99国产精品无码| 欧美精品久久天天躁| 99久久免费精品高清特色大片 | 一本加勒比波多野结衣| 抱着边走边撞水流了一地的水| 欧美男男作爱GAYWWW| AⅤ成年女人毛片免费观看| 欧美丰满熟妇乱XXXXX流白浆| 99国产欧美久久久精品蜜桃| 欧美极品少妇XXXXⅩ喷水| AV无码专区亚洲AVL在线观看 | 欧美人与禽2O2O性论交| 99久久无色码中文字幕人妻蜜柚 | 亚洲AV无码国产蜜桃麻豆| 国内综合精品午夜久久资源| 亚洲精品偷拍区偷拍无码| 久久99久久99小草精品免视看| 一面膜上边一面膜下边韩国| 免费无码一区二区三区| JZZIJZZIJ亚洲乱熟无码| 日本三线和韩国三线的市场定位 | 999ZYZ玖玖资源站在线观看| 青青国产揄拍视频| 抖抈APP免费下载国际版| 天堂…在线最新版在线| 国产性自爱拍偷在在线播放| 亚洲日韩乱码中文无码蜜桃臀网站| 久久久久久久综合色一本| 2021国内精品久久久久精品| 人妻少妇久久中文字幕一区二区| 丰满人妻无奈张开双腿AV| 性欧美18-19SEX性高清播| 九九精品无码专区免费| 1313午夜精品理论片| 日本精品一区二区三区在线视频 | 亚洲AV无码久久久久久精品| 久久寂寞少妇成人内射| 2023国精产品一二三四区| 日本熟妇色XXXXXBBB日本| 国产精品久久久久精品综合| 亚洲精品成人区在线观看 | 锕锕锕锕锕锕好爽视频软件| 久久伊人精品一区二区三区| 99久久精品美女高潮喷水| 日老太太毛茸茸B.内射| 国产午夜福利久久精品| 一区二区三区毛片| 秋霞电影院yy2933| 国产AⅤ爽AV久久久久成人精品| 亚洲AV综合色区无码另类小说| 麻豆一区二区三区精品视频| 成人爽A毛片免费网站美国| 午在线亚洲男人午在线| 浪荡艳妇爆乳JUFD汗だく肉感| 不卡无在一区二区三区四区| 午夜无码伦费影视在线观看| 久久久无码中文字幕久| 变态另类AV手机版天堂| 学生无码AV一区二区三区| 胯下粗长挺进人妻体内电影| 草莓视频在线播放视频| 亚洲VA久久久噜噜噜久久天堂| 老狼老狼芦苇芭蕉| 豆国产97在线 | 亚洲| 亚洲国产精品福利片在线观看| 女人高潮娇喘抽搐喷水动态视频 | 免费下载破解看片APP的软件| 公与憩止痒小说400章| 亚洲中文AⅤ中文字幕| 日日摸日日碰夜夜爽97| 精品人妻无码区在线视频| 爱丫爱丫影院在线看免费| 亚洲AV永久无码精品蜜芽| 欧洲精品免费一区二区三区 | 国产猛进猛出又黄又爽又色| 中文人妻无码一区二区三区在线| 撕掉她的衣服吮的双乳游戏|