這篇文章主要介紹了關於php建庫建表-設定檔-錯誤日誌的方法,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
#。
整理框架
建置庫建表
- ##設定檔類別
--------------本篇后文件结构:-------------------------------------- blog ├─App │ ├─Model 模型目录 │ ├─View 视图目录 │ │ ├─Admin后台目录 │ │ └─Home前台目录 │ ├─Common 配置目录 │ │ └─config.php 配置文件 │ ├─Log 日志目录 │ │ └─log.txt 日志文件 │ ├─Controller 控制器 │ │ ├─Admin后台 │ │ │ └─DemoController.class.php 测试控制器 │ │ └─Home前台 ├─Public 静态公共文件(js,css,images) │ ├─Plugins 插件 │ ├─Back后台 │ └─Home前台 ├─Frame 公共使用的类 │ ├─BaseModel.class.php 数据库连接类 │ ├─BaseController.class.php 控制器公共操作(设置编码,信息跳转) │ ├─FactoryModel.class.php 模型工厂类 │ ├─Log.class.php 日志厂类 │ ├─Config.class.php 配置文件读取类 │ ├─Init.class.php 初始化应用类 │ └─MySQLDB.class.php 数据库操作工具类 └─index.php 入口文件 -----------------------------------------------------------------------------------------------------
利用上篇中建構好的mvc框架結構,正式開始開發部落格專案。先建立資料表,然後開始建立後台,資料前台展示,完成部落格主要模組展示。
下載查看該專案原始碼:https://gitee.com/NewbiesYang/young_blog整理框架
# 清理測試頁面
1)前面建立框架結構,使用了使用者登入測試頁面以及後台首頁頁面。在此全部去掉,從新開始建立前台和後台頁面。類似於我們下載了一個ThinkPHP或Laravel或其他的框架。現在開始在這個微型框架上來建立我們的專案 2)實際開發,會用前端人員做好的靜態頁面來進行開發。所以也可以在 【模板之家】或其他網站 下載 後台模板和前台博客靜態頁面。然後專注於後端開發,可以加快速度。本計畫供學習研究使用,也就不那麼急了。原本是准备全部利用别人写好的前端页面(包括前端显示和后台页面),专注于后端逻辑的开发。而且已经把分类页面列表都做好了。还提交传送了。 此刻,仔细想想,要是这样玩,那我直接用框架更好了。既然做后端开发,自己写个后端页面+程序处理,没什么问题吧..., 置于前端显示页面,那再用前辈写的前端页面倒是可以的 于是乎,卷起柚子,说干就干,先来整理框架,开始搭建博客。。。。。框架結構:
--------------清理后MVC框架文件结构:-------------------------------------- blog ├─App │ ├─Model 模型目录 │ ├─View 视图目录 │ │ ├─Back后台 │ │ └─Home前台 │ ├─Controller 控制器目录 │ │ ├─Back后台 │ │ └─Home前台 ├─Public 静态公共文件(js,css,images) │ ├─Plugins 插件 │ ├─Back后台 │ └─Home前台 ├─Frame 公共使用的类 │ ├─BaseModel.class.php 数据库连接类 │ ├─BaseController.class.php 控制器公共操作(设置编码,信息跳转) │ ├─FactoryModel.class.php 模型工厂类 │ ├─Init.class.php 初始化应用类 │ └─MySQLDB.class.php 数据库操作工具类 └─index.php 入口文件 -----------------------------------------------------------------
後續的開發只需要複製該目錄結構文件, 就可以在此基礎上進行開發了。
提交傳送代碼
git add -A git commit -m "清理MVC结构"git push origin master外掛程式準備
## 1) layui外掛程式: 建立後台程序,準備使用layui前端框架,這個框架個人認為做後台介面還是不錯的。它還包含一些比較使用模組。
用bootstrap也可以,我更傾向於用它來做前台頁面。 下載網址: http://www.layui.com/ 2) jQuery庫: 更方便操作 DOM,尤其是經常使用ajax請求。 3) 其他外掛程式: 如Ueditor編輯器等 需要使用時再下載。一般外掛都會有demo範例, 依照範例和手冊,懂web開發基本能使用。 上述插件暫時不熟悉沒有關係,官網上有手冊,需要什麼模組,便查手冊便使用,就像搭積木,如果要做得更好,當然要花更多的時間多練習。我本著後台給程式管理員使用,不一定要非常漂亮,實用就好。 建庫建表 準備: 建立分支$ git checkout master
$ git checkout -b "start-admin-module"
建表思維:
# 根據部落格模板,從首頁開始分析, 分析哪些需要動態數據,以便建立對應數據表。 用戶: 登錄, 註冊, 修改, 刪除文章: 分類管理, 評論管理## # 選單管理: 不同權限人員,對應選單列也有差異
建表工具可以任意選擇。初期手寫建表語句,熟悉後直接使用工具。本專案中使用Navicat 建立資料庫與表格
資料庫,表格
## 1) 建立資料庫:php_blogcreate database php_blog charset utf81) 建立資料庫:php_blog
CREATE TABLE `y_user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户主键', `username` varchar(20) NOT NULL COMMENT '用户名', `password` char(32) NOT NULL COMMENT '密码', `email` varchar(50) NOT NULL DEFAULT '' COMMENT '注册邮箱', `token_email` varchar(32) NOT NULL DEFAULT '' COMMENT '邮箱验证', `status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '状态, 0-正常,1-禁用', `gid` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '角色id,1-管理员,2-普通用户,0-无效', `login_ip` varchar(20) NOT NULL DEFAULT '' COMMENT '最后登录的ip地址', `login_times` smallint(6) unsigned NOT NULL DEFAULT '0' COMMENT '登录次数', `created_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '注册时间', `updated_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最后一次登录时间', PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`), UNIQUE KEY `email` (`email`) ) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COMMENT='用户表';1) 建立資料庫:php_blog
CREATE TABLE `y_user_group` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '角色id', `name` varchar(20) NOT NULL DEFAULT '' COMMENT '角色名称', `auths` varchar(255) NOT NULL DEFAULT '' COMMENT '角色权限', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='角色表';us 2) 使用者表格: _
CREATE TABLE `y_menus` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '菜单id', `title` varchar(20) DEFAULT '' COMMENT '菜单名称', `controller` varchar(30) DEFAULT '' COMMENT '控制器名称', `action` varchar(30) DEFAULT '' COMMENT '操作名称', `status` tinyint(1) unsigned DEFAULT '1' COMMENT '状态,1-正常,0-禁用', `is_hidden` tinyint(1) unsigned DEFAULT '0' COMMENT '是否隐藏,0-正常显示,1-隐藏', `sort` int(10) unsigned DEFAULT '0' COMMENT '排序', `pid` int(10) unsigned DEFAULT '0' COMMENT '上一级菜单', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COMMENT='菜单表';# ##
CREATE TABLE `y_article` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '文章id', `title` varchar(60) NOT NULL DEFAULT '' COMMENT '标题', `description` varchar(200) NOT NULL DEFAULT '' COMMENT '文章简介', `content` text NOT NULL COMMENT '内容', `cid` int(10) unsigned NOT NULL COMMENT '文章类别', `pic` varchar(150) NOT NULL DEFAULT '' COMMENT '文章封面图', `pic_watermark` varchar(150) NOT NULL DEFAULT '' COMMENT '水印图', `pic_thumb` varchar(150) NOT NULL DEFAULT '' COMMENT '缩略图', `uid` int(10) unsigned NOT NULL COMMENT '作者', `clicks` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '阅读数(点击数)', `updated_at` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '更新时间', `created_at` int(11) NOT NULL DEFAULT '0' COMMENT '发布时间', PRIMARY KEY (`id`), KEY `title` (`title`), KEY `uid` (`uid`), KEY `clicks` (`clicks`), KEY `cid` (`cid`) USING BTREE ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='文章表';使用者表SQL
3)角色表: y_user_group
CREATE TABLE `y_category` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '分类id', `catename` varchar(15) NOT NULL COMMENT '分类名', `description` varchar(255) NOT NULL DEFAULT '' COMMENT '简介', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8 COMMENT='文章类别表';#角色表SQL
4
角色表 42 ) 選單表: y_menusCREATE TABLE `y_comment` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '评论id',
`uid` int(10) unsigned NOT NULL COMMENT '评论者',
`created_at` int(11) DEFAULT NULL COMMENT '评论时间',
`content` varchar(255) NOT NULL DEFAULT '' COMMENT '评论内容',
`aid` int(10) unsigned NOT NULL COMMENT '被评论的文章', PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='评论(回复)表';
5) 文章表y_articleCREATE TABLE `y_session` (
`sess_id` varchar(50) NOT NULL DEFAULT '' COMMENT 'session id',
`data` text NOT NULL COMMENT 'session数据',
`created_at` int(11) NOT NULL COMMENT 'session创建时间', PRIMARY KEY (`sess_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='session数据表';
##SQL#文章表#SQL
1 class BaseModel {
2 。。。
3 。。。
4 。。。
5 function __construct(array $config=null)
6 {
7 $conf = array(
8 'host'=>'localhost',
9 'user'=>'root',
10 'pwd'=>'root',
11 'port'=>'3306',
12 'charset'=>'utf8',
13 'dbname'=>'php_blog',
14 );
15 $conf = empty($config)? $conf : array_merge($conf,$config);
16 $this->db = Db::getDb($conf);
17 }
18 }
文章類別表SQL
7) 評論(回覆)表格#評論(回覆)表格SQL######### 8) session資料表y_session (其實可以不用這個,目的是為了操作"將session寫入資料庫" )###step 1: 创建文件 App/Common/config.php 并将数据库连接信息写入该配置文件 step 2: 在Frame/目录下创建读取配置文件类 Config.class.php step 3: 设置自动加载 读取配置类 step 4: 基础模型类实例化 读取配置类。 操作数据库必须要经过基础模型类 step 5: 调整数据库工具类获取配置信息,既 其构造方法中通过传递进来的数据配置信息对象获取 step 6: 测试连接数据结果,验证获取配置####### session資料表SQL######### 為了避免弄的太複雜, 暫時建立這些資料表,欄位後續可以進行調整。如果需要加入模組功能,可以相應增加對應資料表。 ######### 連接資料庫######### 在badeModel中修改資料連接的陣列資訊【Frame/BaseModel.class.php】 (如果使用設定檔類,此處就可以省略了)###
1 class BaseModel { 2 。。。 3 。。。 4 。。。 5 function __construct(array $config=null) 6 { 7 $conf = array( 8 'host'=>'localhost', 9 'user'=>'root', 10 'pwd'=>'root', 11 'port'=>'3306', 12 'charset'=>'utf8', 13 'dbname'=>'php_blog', 14 ); 15 $conf = empty($config)? $conf : array_merge($conf,$config); 16 $this->db = Db::getDb($conf); 17 } 18 }
设置连接数据库信息
配置文件类
需求分析:
为了框架便于数据库连接以及方便读取配置文件。如 希望在 App/Common/config.php 做一些配置项,要求能读取这些配置并应用到项目
思路:
step 1: 创建文件 App/Common/config.php 并将数据库连接信息写入该配置文件 step 2: 在Frame/目录下创建读取配置文件类 Config.class.php step 3: 设置自动加载 读取配置类 step 4: 基础模型类实例化 读取配置类。 操作数据库必须要经过基础模型类 step 5: 调整数据库工具类获取配置信息,既 其构造方法中通过传递进来的数据配置信息对象获取 step 6: 测试连接数据结果,验证获取配置
实现连接数据库-读取数据库配置信息思路
代码实现
1) 创建配置文件config.php 【App/Common/Config.php】
<?php/** * 配置文件 * User: young */return [ //数据库连接配置 'host'=>'localhost', 'user'=>'root', 'pwd'=>'root', 'port'=>'3306', 'charset'=>'utf8', 'dbname'=>'php_blog',];
配置文件-数据库配置信息
2) 创建读取配置文件类 【Frame/Config.class.php】
1 <?php 2 /** 3 * 配置文件读取类 4 * User: young 5 */ 6 7 class Config 8 { 9 protected static $ins = null; //本类实例 10 protected $cfg = array(); //存储配置项 11 12 /** 13 * 获取本类实例 14 * @access public 15 * @return object 本类的单例对象 16 */ 17 public static function getIns() { 18 if(false === (self::$ins instanceof self)){ 19 self::$ins = new self(); 20 } 21 return self::$ins; 22 } 23 24 /** 25 * 构造方法: 读取配置项 26 * @access public 27 * @return void 28 */ 29 final protected function __construct() { 30 require APP.'Common'.DS.'config.php'; //读取配置项 31 $this->cfg = $cfg; 32 } 33 34 /** 35 * 根据指定的配置项,返回该配置项的值 36 * @param string $k 配置项 37 * @return mixed|null 返回配置项的数据 38 */ 39 public function __get($k) { 40 if(!isset($this->cfg[$k])) { 41 return null; 42 } 43 return $this->cfg[$k]; 44 } 45 46 47 /** 48 * 根据指定的配置项,返回配置项的值 49 * @param string $k 配置项名称 50 * @param string $v 配置项对应的值 51 */ 52 public function __set($k,$v) { 53 $this->cfg[$k] = $v; 54 } 55 }
3) 自动加载配置类
需要自动加载该类, 该类在Frame目录下, 所以可以写入到 Init.class.php 类中的属性数组中 【Frame/Init.class.php】
<?php /** * 初始化应用类 * User: young */ class Init { protected static $frame = array('BaseController','BaseModel','Db','FactoryModel','Config'); 。。。 。。。 。。。 自动加载配置类
4)基础模型类实例化配置类【Frame/BaseModel.class.php】
<?php /** * BaseModel.class.php 基础模型类 * 连接数据库 * @author young */ class BaseModel { protected $db = null; /** * 构造方法: 实例化数据库类 * @access public */ function __construct() { $conf = Config::getIns(); //读取配置项实例 $this->db = Db::getDb($conf); } }
5)数据库读取配置项信息 【Frame/Db.class.php】
<?php /** * Db.class.php 数据库操作工具类 * @author young */ class Db { 。。。 。。。 。。。 /** * 构造方法: 保存数据库连接信息,连接数据库 * @access private * @param array $conf 数据库连接信息 */ private function __construct($conf) { $this->host = $conf->host; $this->user = $conf->user; $this->pwd = $conf->pwd; $this->port = $conf->port; $this->charset = $conf->charset; $this->dbname = $conf->dbname; $this->connect(); } 。。。 。。。 。。。 } 数据库工具类获取配置信息
6) 测试 在App/Controller/Home/DemoController.class.php 用于测试数据库连接情况
<?php /** * 测试控制器类 * User: young */ class DemoController extends BaseController { public function test() { $db = new BaseModel(); $data = $db->db->getAllRows("select * from y_user"); var_dump($data); } }
测试控制器类测试连接数据库
注: 前提,需要将BaseModel.class.php中的$db属性先临时修改为public公开,才能测试成功 (原因:在Demo控制器中实例化的基础模型类,数据库操作实例是放在类的属性db中,外部不能访问protected属性), 本节所有测试,可以临时将db设置为公开的。
还可以使用配置如: 上传目录,网站配置信息等,根据需求自定义配置需求,再通过读取配置类读取配置的数据
提交代码
git add -A git commit -m "完成读取配置文件类"
错误日志记录
除了开发阶段调试错误, 项目上线一般会将错误信息写入指定文件中。安全性更好。
需求分析:
将错误写入日志文件中,这里暂时主要记录数据库操作的错误。 如:默认将错误记录在App/log/logError.txt。 如果在配置文件中进行了配置,则将日志信息写入到配置项log指定的目录中
思路:
step 1: 制作日志类Frame/Log.class.php, 用于将错误信息写入到指定文件中。 (设置日志文件位置,正好可以利用上面写的配置项,通过读取配置来实现) step 2: 在基础模型类BaseModel中,读取配置项后, 可以将日志目录路径写入常量。 使用try..catch 捕捉异常,将错误写入日志 step 3: 实现日志类自动加载。Log类在Frame目录中,所以只要在初始化应用类Init中的属性$frame数组中加入 “Log” step 4: 记录错误。 数据库连接可能失败, sql语句可能执行失败 step 5: 测试错误日志记录功
实现错误日志记录过程思路
代码实现
1) 制作错误日志类 【Frame/Log.class.php】
<?php /** * Db.class.php 数据库操作工具类 * @author young */ class Db { 。。。 。。。 。。。 /** * 构造方法: 保存数据库连接信息,连接数据库 * @access private * @param array $conf 数据库连接信息 */ private function __construct($conf) { $this->host = $conf->host; $this->user = $conf->user; $this->pwd = $conf->pwd; $this->port = $conf->port; $this->charset = $conf->charset; $this->dbname = $conf->dbname; $this->connect(); } 。。。 。。。 。。。 } 数据库工具类获取配置信息
2) 读取日志位置,捕捉错误 【Frame/BaseModel.class.php】
发生错误记录后,这里只是简单使用exit(..)退出, 可以自定error错误页面会更好
<?php /** * BaseModel.class.php 基础模型类 * 连接数据库,捕捉记录错误 * @author young */ class BaseModel { Public $db = null; /** * 构造方法: 实例化数据库类 * @access public */ function __construct() { $conf = Config::getIns(); //读取配置项实例 //读取日志配置项目 并写成常量 $logPath = $conf->log; $logPath = !isset($logPath) ? APP."log".DS : $logPath; define('LOG',$logPath); //监控数据库操作 try { $this->db = Db::getDb($conf); }catch(Exception $e) { $err = ''; $err .= '错误代码:' . $e->getCode() . "\r\n"; $err .= '错误信息:' . $e->getMessage() . "\r\n"; $err .= '文件:' . $e->getFile() . "\r\n"; $err .= '行号:' . $e->getLine() . "\r\n\r\n"; Log::write($err); exit("<h2 id="客官-页面暂时无法响应-请稍后访问">客官!页面暂时无法响应,请稍后访问</h2>"); } } } 点击查看【基础模型类中监测并记录错误】
3)自动加载日志记录类 【Frame/Init.class.php】
<?php /** * 初始化应用类 * User: young */ class Init { protected static $frame = array('BaseController','BaseModel','Db','FactoryModel','Config','Log'); 。。。 。。。 。。。 点击查看【自动加载日志类】
4) 记录错误 【Frame/Db.class.php】
数据库连接可能发生错误处理
class Db { 。。。 。。。 。。。 /** * 连接数据库,设置编码,选库 * @access private */ private function connect() { $this->link = @ mysql_connect("{$this->host}:{$this->port}", "$this->user", "$this->pwd") ; if(!$this -> link) { $error = new Exception("数据库连接不上",10000); throw $error; } $this->setCharset($this->charset); $this->useDb($this->dbname); } 。。。 。。。 。。。 点击查看【数据库连接错误抛出】
sql语句发生错误处理
class Db { 。。。 。。。 。。。 /** * 执行sql语句 * @param string $sql sql语句 * @return mixed */ private function query($sql) { $result = mysql_query($sql, $this->link); // if(false === $result) { // echo "<p>sql执行失败!<br>"; // echo "<br>失败语句:".$sql; // echo "<br>错误代号".mysql_errno(); // echo "<br>错误提示: ".mysql_error()."</p>"; // exit(); // } if(false === $result) { $err = "sql执行失败!\r\n失败语句:".$sql."\r\n错误代号:".mysql_errno()."\r\n错误提示:".mysql_error()."\r\n\r\n"; Log::write($err); exit("<h2 id="查询出错-请稍后访问">查询出错,请稍后访问</h2>"); } return $result; } 。。。 。。。 。。。 点击查看【执行SQL错误处理】
测试
可以在【App/Common/config.php】中配置日志文件目录。 如果不进行配置, 默认记录在App/log/目录中
<?php /** * 配置文件 * User: young */ return [ //数据库连接配置 。。。 、 。。。 。。。 //日志文件位置配置 'log' => APP, ]; 点击查看【日志文件配置】
以下测试可以 开启配置项中的配置log 和关闭后分别测试。 注意: 如果没有做配置log, 则要首先在App目录下建立一个log目录
1. 在配置文件中故意写错数据库连接信息,如密码写错
2. 执行sql错误
最后说明: 配置目录,日志目录都是不希望浏览器直接访问的,所以需要将.htaccess文件放入目录中 (由于App目录中已经存在,故也可以省略)
提交传送代码
git add -A git commit -m "完成日志类"git checkout master git merge start-admin-module git push origin master
小结: 本篇主要实现了 框架清理,博客数据库表搭建,创建配置读取类,日志记录类。
实际上,到此仍然只是更加完善了一下框架结构,增加了2个功能。正如前篇所提,还有很多是可以改进的。这里就暂时不再继续增加功能了。
提出问题:
1. 如何使用该自制框架搭建项目 ==> 用户操作+mvc实现
2. 如何着手使用ajax实现后台登录功能 ==> ajax应用
3. 如何著手實現分類模組功能,它有哪些操作 ==> 增刪改查
下一步: 後台模板視圖製作,後台登錄,文章分類模組功能。
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!
相關推薦:
以上是php源碼建庫建表-設定檔-錯誤日誌的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

PHPSession失效的原因包括配置錯誤、Cookie問題和Session過期。 1.配置錯誤:檢查並設置正確的session.save_path。 2.Cookie問題:確保Cookie設置正確。 3.Session過期:調整session.gc_maxlifetime值以延長會話時間。

在PHP中調試會話問題的方法包括:1.檢查會話是否正確啟動;2.驗證會話ID的傳遞;3.檢查會話數據的存儲和讀取;4.查看服務器配置。通過輸出會話ID和數據、查看會話文件內容等方法,可以有效診斷和解決會話相關的問題。

多次調用session_start()會導致警告信息和可能的數據覆蓋。 1)PHP會發出警告,提示session已啟動。 2)可能導致session數據意外覆蓋。 3)使用session_status()檢查session狀態,避免重複調用。

在PHP中配置會話生命週期可以通過設置session.gc_maxlifetime和session.cookie_lifetime來實現。 1)session.gc_maxlifetime控制服務器端會話數據的存活時間,2)session.cookie_lifetime控制客戶端cookie的生命週期,設置為0時cookie在瀏覽器關閉時過期。

使用數據庫存儲會話的主要優勢包括持久性、可擴展性和安全性。 1.持久性:即使服務器重啟,會話數據也能保持不變。 2.可擴展性:適用於分佈式系統,確保會話數據在多服務器間同步。 3.安全性:數據庫提供加密存儲,保護敏感信息。

在PHP中實現自定義會話處理可以通過實現SessionHandlerInterface接口來完成。具體步驟包括:1)創建實現SessionHandlerInterface的類,如CustomSessionHandler;2)重寫接口中的方法(如open,close,read,write,destroy,gc)來定義會話數據的生命週期和存儲方式;3)在PHP腳本中註冊自定義會話處理器並啟動會話。這樣可以將數據存儲在MySQL、Redis等介質中,提升性能、安全性和可擴展性。

SessionID是網絡應用程序中用來跟踪用戶會話狀態的機制。 1.它是一個隨機生成的字符串,用於在用戶與服務器之間的多次交互中保持用戶的身份信息。 2.服務器生成並通過cookie或URL參數發送給客戶端,幫助在用戶的多次請求中識別和關聯這些請求。 3.生成通常使用隨機算法保證唯一性和不可預測性。 4.在實際開發中,可以使用內存數據庫如Redis來存儲session數據,提升性能和安全性。

在無狀態環境如API中管理會話可以通過使用JWT或cookies來實現。 1.JWT適合無狀態和可擴展性,但大數據時體積大。 2.Cookies更傳統且易實現,但需謹慎配置以確保安全性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。