#### session屬性
有效期:默認關閉瀏覽器! 有效路徑:/ 默認整站有效
有效域名:默認盡在當前域名下有效!
是否僅安全連接傳輸:默認為非 是否HTTPONLY:默認為非;
Session屬性的來源?
COOKIE中存儲session-ID的屬性,決定了對應的session數據的屬性。
Cookie名稱PHPSESSID有它的屬性
如何設置 session數據的屬性?
設置COOKIE中session-ID這個COOKIE變量屬性即可!
設置方案如下:
1. 方案一:配置變量php.ini:
session.cookie\_lifetime=0 session.cookie\_path=/ session.cookie\_domain=
session.cookie\_secure= session.cookie\_httponly
可以更改以上配置,然后重啟apache服務器
1. 方案二,在腳本中,開啟session之前使用函數進行配置(建議)
Ini\_set(配置項,值);用于設置某個PHP配置選項
例:ini\_set(‘session.cookie\_lifetime’, ’3600’ ); ini\_set( ‘session.cookie\_domain’, ’.kang.com’ );
也可以用:session\_set\_cookie\_params(有效期,有效路徑,有效域,是否僅安全連接傳輸,是否HTTPONLY)
例如:session\_set\_cookie\_params(3600,’/’,’.kang.com’);
建議使用該方法,僅僅影響當前腳本周期。不影響其他項目!
實際環境中,很少該session的有效期。經常改有效域名。
開啟bool session\_start(void).一個頁面只能開啟一次,不能重復開啟,可以加@屏蔽錯誤
session\_id() || session\_start();
添加session數據比如$\_SESSION\[‘name’\]=’admin’;
Session的名稱可以是字符下標,也可以是整形下標,除了資源外都可以保存
$\_SESSION\[‘user’\]\[\]=’admin’; $\_SESSION\[‘user’\]\[\]=’1.9’; $\_SESSION\[‘user’\]\[\]=false; $\_SESSION\[‘user’\]\[\]=array(1,2); $\_SESSION\[‘user’\]\[\]=new student;
除了資源外,都可以保存
在服務器中存儲的位置,保存在c盤下C:\\WINDOWS\\TEMP,文件名格式:sess\_sessID
刪除session數據:使用unset()來刪除單個session數據,比如unset($\_SESSION\[‘name’\]).也可以將一個空數組,賦給$\_SESSION變量,將SESSION文件內容情況,session文件成為垃圾
讀取SESSION數據,讀取或增刪改查,都是使用$\_SESSION全局數組.
比如echo $\_SESSION\[‘name’\];
銷毀SESSION文件,只刪除自己的SESSION,不會刪除別的用戶的.語法:bool session\_destroy().用destroy之后要在開啟session,它才有文件.否則是在內存中,能頁面輸出,但是沒文件. 同時關閉session機制!
獲取當前的session-id值.語法:string session\_id(\[string $id\])
獲取當前的session的cookie數據名稱.語法:string session\_name(\[string $name\]),一般不修改ini
Session設置:修改php.ini文件,session保存位置:session.save\_path=”c:/…”;
修改session名稱session.name=PHPSESSID
#### session\_set\_cookie\_param

使用函數修改session的cookie的相關參數,session\_set\_cookie\_param
語法:void session\_set\_cookie\_params ( int $lifetime \[, string $path \[, string $domain \[, bool $secure = false \[, bool $httponly = false \]\]\]\] )
參數:
$lifetime,過期時間,以秒為單位,直接寫秒。
$path 有效路徑
$domain 有效域名
$secure 是否僅限https發送COOKIE。
$httponly 是否僅限http協議使用COOKIE
注意:該函數必須在SESSION\_START()之前設置
#### Session垃圾回收
gc:garbage collection垃圾回收 maxlifetime:最大存活時間
修改php.ini文件 session.gc\_maxlifetime=1440 垃圾默認時間1440秒
回收概率
session.gc\_probability:概率,相當于分子。默認值為1。
session.gc\_divisor:除數、因子。相當于分母。默認值為1000
默認的比率是:1/1000,每1000個用戶訪問時,會完整的進行一次清理。
#### 重寫session的存儲機制
##### 語法細節
##### 先設置在開啟session機制
Session\_set\_save\_handler()先于session\_start()被調用。
不要自動開啟session!php.ini: session.auto\_start = 0
##### PHP配置項:session.save\_handler
PHP所使用的存儲機制:php.ini中:session.save\_handler=files默認文件機制
建議,將以上配置改為 user: 表示用戶自定義!
也可以腳本配置:ini\_set( ‘session.save\_handler’,’user’ );
##### 告知session機制,在需要讀寫時,使用用戶自定義的讀寫函數完成
Session\_set\_save\_handler(開始函數,結束函數,讀函數,寫函數,刪除函數,GC函數);
用來將用戶自定義的函數,設置成session存儲相關的函數。
session\_set\_save\_handler('sessBegin', 'sessEnd', 'sessRead', 'sessWrite', 'sessDelete', 'sessGC');
Tip:以上的語法,僅僅是設置告知,在session機制運行到某個時間點時,才會被調用!
##### 使用session
開啟session機制 session\_start();
操作$\_SESSION $\_SESSION\[‘new\_key’\]=’new\_value’;
##### 創建session表
create table session (
sess\_id varchar(40) not null,
sess\_content text,
last\_write int not null default 0,
primary key (sess\_id)
) engine=myisam charset=utf8;
全部代碼如下
function sessBegin() {
mysql\_connect('127.0.0.1:3306', 'root', '520');
mysql\_query('set names utf8');
mysql\_query('use php2');
}
function sessEnd() {return true;}
function sessRead($sess\_id) {
$sql = "select sess\_content from session where sess\_id='$sess\_id'";
$result = mysql\_query($sql);
$row = mysql\_fetch\_assoc($result);
if ($row) {
return $row\['sess\_content'\];
} else {
return '';
}
}
function sessWrite($sess\_id, $sess\_content) {
// replace into: 如果主鍵存在,則替換,否則插入。語法與insert into一致!
$sql = "replace into session values ('$sess\_id', '$sess\_content', unix\_timestamp())";
return mysql\_query($sql);
}
function sessDelete($sess\_id) {
$sql = "delete from session where sess\_id='$sess\_id'";
return mysql\_query($sql);
}
function sessGC($maxlifetime) {
$sql = "delete from session where last\_write < unix\_timestamp()-$maxlifetime";// 最后寫入時間 < 當前時間-最大有效期
return mysql\_query($sql);
}
session\_set\_save\_handler('sessBegin', 'sessEnd', 'sessRead', 'sessWrite', 'sessDelete', 'sessGC');
ini\_set('session.save\_handler', 'user');
#### 瀏覽器禁用COOKIE,session是否可用?
COOKIE被禁用,session-Id不能存儲和傳輸。不可用!
理論上的解決方案:
通過 URL, 或者 POST數據數據向服務器端,每次傳輸session-ID!
例如下面的配置:php.ini
Session是否僅僅是用COOKIE完成傳輸session-ID:Php.ini中:session.use\_only\_cookies=1
是否通過其他方式自動傳輸session-ID. Php.ini中session.use\_trans\_sid=0
或者腳本設置: ini\_set(‘session.use\_only\_cookies’,’0’); ini\_set(‘session.use\_trans\_sid’,’1’);
測試:在瀏覽器中設置關閉接受來自站點的Cooki
<?php
ini\_set('session.use\_only\_cookies', '0'); // 不僅僅是用COOKIE傳輸session-ID
ini\_set('session.use\_trans\_sid', '1'); // 自動通過 url 或者 表單 傳輸 session\_id
session\_start(); // 常規使用session即可!
?>
<hr>
<form action="session\_no\_cookie\_2.php" method="post"> //文件地址就是自己
<input type="submit">
</form>
<hr>
<a href="session\_no\_cookie\_2.php"> no cookie</a>
擴展:mysql中是用concat(-,-)方法連接字符串的
#### 總結
相關配置
Session.save\_handler 存儲處理器: files|user
Session.save\_path 存儲地址。
Session.cookie\_XXX (lifetime,path,domain,secure,httponly)存儲session-ID這個COOKIE變量的屬性
Session.gc\_maxlifetime Session.gc\_probability Session.gc\_divisor
- PHP
- 頁面跳轉
- 數據類型和運算符
- 整形
- 浮點型
- 字符串型
- 布爾型
- 判斷數據類型
- 傳值
- 類型轉換
- 常量
- 進制轉換
- 運算符
- 各種結構
- 數組
- 分類
- 創建
- 多維數組
- 數組操作函數
- 數組指針
- 排序
- 數組交換需要注意的
- 函數
- 創建函數
- 參數傳遞
- 參數數量問題
- 返回值
- 可變函數
- 匿名函數
- 冒泡,選擇,二分
- 變量的作用域
- 局部作用域中使用全局
- use
- 有關函數的系統函數
- 遞歸
- 遞推(迭代)
- 面向對象
- 類和對象
- 值傳遞
- 引用傳遞
- 成員
- 構造和析構調用上級同類方法
- 重寫
- 最終類
- 最終方法
- 設計模式
- 抽象類
- 抽象方法
- 抽象類和抽象方法的細節
- 重載
- 接口
- 類和接口的總結
- 自動加載
- 克隆
- 對象的遍歷
- 內置標準類
- 其他類型轉對象類型
- 類型約束
- 魔術方法
- static關鍵字
- 命名空間
- 子級空間
- 引入機制
- 公共空間
- 使用注意
- 錯誤處理
- 錯誤的觸發
- 錯誤報告的顯示
- 錯誤日志的記錄問題
- 自定義錯誤處理器
- 異常拋出
- 文件鎖
- 文件處理
- 序列化與反序列化
- 目錄操作
- 文件操作
- 文件上傳
- $_FILFS
- 多文件上傳處理
- 繪圖技術
- 創建畫布資源
- 操作畫布
- 導出
- 銷毀資源
- 驗證碼
- 補充文件居中
- 在圖像上寫入一行TTF字體的文本
- 獲得圖像相關信息
- 水印
- 等比例縮放
- 常見錯誤
- HTTP協議
- URL的構成
- 請求
- 防盜鏈
- 響應
- 使用header()禁用緩存
- 下載文件的HTTP響應頭
- 文件下載
- HTTPS
- 會話技術
- cookie
- session
- PHP操作MySQL函數
- 登錄
- 一些函數
- 從結果集中取出一行數據
- 獲取行數,列數,字段名
- 安全
- 緩存
- 補充
- MySQL
- 語法
- 備份和恢復
- 注釋
- 語句行
- 字符集
- 校驗級
- 存儲引擎
- 數據庫操作
- 創建數據庫
- 刪除數據庫
- 顯示數據庫
- 修改數據庫
- 數據類型
- 整數類型
- 小數類型
- 日期時間型
- 字符和文本型
- enum類型
- set類型
- 時間類型
- 表操作
- 創建
- 索引
- 約束
- 表選項列表
- 表的其他語句
- 視圖語法
- 增刪改查
- 插入數據(增)
- 刪除數據(刪)
- 修改數據(改)
- 查詢(查)
- 用戶和權限管理
- 用戶管理
- 權限管理
- PDO
- 與PDO相關的幾個類
- 連接數據庫
- 使用
- PDO的錯誤處理
- PDO結果集對象
- pdo結果集對象的常用方法
- PDO預處理
- 常用屬性
- mysql編程
- 事務
- 語句塊
- mysql中的變量
- (存儲)函數
- 存儲過程procedure
- 觸發器(trigger)
- mysql優化
- 存儲引擎
- 字段類型
- 逆范式
- 索引
- Memcache
- 與redis區別
- 安裝
- php開啟擴展
- php操作memcache
- Key的命名
- 有效期
- 各種數據類型存儲
- 刪除
- 第三個參數壓縮作用
- 其他相關操作方法
- 終端命令操作方式
- 獲取memcache統計信息
- Git
- 創建一個git倉庫
- 添加
- 修改文件
- 刪除文件
- 克隆
- 個人網站
- Ajax
- 發起請求
- 接受響應
- 常用屬性和方法
- get和post
- get
- post
- 同步和異步
- 什么時候使用同步請求?
- 分頁
- xml的接收和處理
- JSON
- 無刷新表單提交和進度條
- JQuery操作ajax
- iframe
- 郵件
- 介紹
- 發送郵件
- 直投郵件
- 中轉郵件發送
- phpmailer
- 正則表達
- 簡單使用
- preg_match()
- 正則內容
- 定義字符集
- 特別字符集
- 組合字符集
- 限制字符
- 模式修正符
- 進行全局匹配