电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

PHP用Session實現用戶登陸功能

瀏覽:146日期:2022-06-06 10:09:46
目錄
  • 一、啟動 Session 會話,并創建一個 $admin 變量:
  • 二、驗證提交數據
  • 三、判斷是否登陸:
  • 四、如果要登出系統怎么辦?銷毀 Session 即可。
  • 五、設置生存周期

對比起Cookie,Session 是存儲在服務器端的會話,相對安全,并且不像 Cookie 那樣有存儲長度限制。由于 Session 是以文本文件形式存儲在服務器端的,所以不怕遠程用戶修改 Session 內容。實際上在服務器端的 Session 文件,PHP 自動修改 Session 文件的權限,只保留了系統讀和寫權限,而且不能通過 ftp 修改,所以安全得多。

因為客戶端 Cookie 中的信息是有可能被修改的。假如你存儲 $admin 變量來表示用戶是否登陸,$admin 為 true 的時候表示登陸,為 false 的時候表示未登錄,在第一次通過驗證后將 $admin 等于 true 存儲在 Cookie,下次就不用驗證了,這樣對么?錯了,假如有人偽造一個值為 true 的 $admin 變量那不是就立即取的了管理權限么?非常的不安全。

而 Session 就不同了,我們可以單純存儲一個 $admin 變量來判斷是否登陸,首次驗證通過后設置 $admin 值為 true,以后判斷該值是否為 true,假如不是,轉入登陸界面,這樣就可以減少很多數據庫操作了。

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

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

二、驗證提交數據

假設數據庫存儲的是用戶名和 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("用戶名密碼錯誤");
}
?>

三、判斷是否登陸:

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

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

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

注釋:session_destroy() 將重置 session,您將失去所有已存儲的 session 數據。

五、設置生存周期

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 生存期的角色。

  • 通過Cookie設置 Session 的生存期:
<?php
session_start();
//  保存一天
$lifeTime = 24 * 3600;
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
?>
  • 通過函數 session_set_cookie_params(); 來設置 Session 的生存期的,該函數必須在 session_start() 函數調用之前調用:
<?php
//  保存一天
$lifeTime = 24 * 3600;
session_set_cookie_params($lifeTime);
session_start();
$_SESSION["admin"] = true;
?>
  • 假設客戶端禁用 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_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;
?>

到此這篇關于PHP用Session實現用戶登陸功能的文章就介紹到這了,更多相關PHP用Session登陸內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: PHP
主站蜘蛛池模板: 化工ERP软件_化工新材料ERP系统_化工新材料MES软件_MES系统-广东顺景软件科技有限公司 | 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 浙江寺庙设计-杭州寺院设计-宁波寺庙规划_汉匠| 风电变桨伺服驱动器-风电偏航变桨系统-深圳众城卓越科技有限公司 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 金联宇电缆总代理-金联宇集团-广东金联宇电缆实业有限公司 | 广州办公室设计,办公室装修,写字楼设计,办公室装修公司_德科 | 西安耀程造价培训机构_工程预算实训_广联达实作实操培训 | 电机修理_二手电机专家-河北豫通机电设备有限公司(原石家庄冀华高压电机维修中心) | 药品/药物稳定性试验考察箱-埃里森仪器设备(上海)有限公司 | 世界箱包品牌十大排名,女包小众轻奢品牌推荐200元左右,男包十大奢侈品牌排行榜双肩,学生拉杆箱什么品牌好质量好 - Gouwu3.com | 许昌奥仕达自动化设备有限公司 | 金属软管_不锈钢金属软管_巩义市润达管道设备制造有限公司 | 盐水蒸发器,水洗盐设备,冷凝结晶切片机,转鼓切片机,絮凝剂加药系统-无锡瑞司恩机械有限公司 | 珠海冷却塔降噪维修_冷却塔改造报价_凉水塔风机维修厂家- 广东康明节能空调有限公司 | 电渗析,废酸回收,双极膜-山东天维膜技术有限公司 | 能耗监测系统-节能监测系统-能源管理系统-三水智能化 | 上海三信|ph计|酸度计|电导率仪-艾科仪器 | 合肥升降机-合肥升降货梯-安徽升降平台「厂家直销」-安徽鼎升自动化科技有限公司 | 房屋质量检测-厂房抗震鉴定-玻璃幕墙检测-房屋安全鉴定机构 | 两头忙,井下装载机,伸缩臂装载机,30装载机/铲车,50装载机/铲车厂家_价格-莱州巨浪机械有限公司 | 高柔性拖链电缆-聚氨酯卷筒电缆-柔性屏蔽电缆厂家-玖泰电缆 | LHH药品稳定性试验箱-BPS系列恒温恒湿箱-意大利超低温冰箱-上海一恒科学仪器有限公司 | 定量包装机,颗粒定量包装机,粉剂定量包装机,背封颗粒包装机,定量灌装机-上海铸衡电子科技有限公司 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | 山东集装箱活动房|济南集装箱活动房-济南利森集装箱有限公司 | 山东锐智科电检测仪器有限公司_超声波测厚仪,涂层测厚仪,里氏硬度计,电火花检漏仪,地下管线探测仪 | 电地暖-电采暖-发热膜-石墨烯电热膜品牌加盟-暖季地暖厂家 | 生产加气砖设备厂家很多,杜甫机械加气砖设备价格公道 | 山东太阳能路灯厂家-庭院灯生产厂家-济南晟启灯饰有限公司 | 质检报告_CE认证_FCC认证_SRRC认证_PSE认证_第三方检测机构-深圳市环测威检测技术有限公司 | 深圳VI设计-画册设计-LOGO设计-包装设计-品牌策划公司-[智睿画册设计公司] | 活动策划,舞台搭建,活动策划公司-首选美湖上海活动策划公司 | 折弯机-刨槽机-数控折弯机-数控刨槽机-数控折弯机厂家-深圳豐科机械有限公司 | 拉力测试机|材料拉伸试验机|电子拉力机价格|万能试验机厂家|苏州皖仪实验仪器有限公司 | 翻斗式矿车|固定式矿车|曲轨侧卸式矿车|梭式矿车|矿车配件-山东卓力矿车生产厂家 | 贴板式电磁阀-不锈钢-气动上展式放料阀-上海弗雷西阀门有限公司 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 | 楼梯定制_楼梯设计施工厂家_楼梯扶手安装制作-北京凌步楼梯 | 碳纤维复合材料制品生产定制工厂订制厂家-凯夫拉凯芙拉碳纤维手机壳套-碳纤维雪茄盒外壳套-深圳市润大世纪新材料科技有限公司 | 电表箱-浙江迈峰电力设备有限公司-电表箱专业制造商 |