## 框架中session/cookie的使用
**session**
session的作用主要在保存會話信息,在訪問者瀏覽網站的期間,對訪問者相關的信息進行記錄,當瀏覽器關閉后,會話結束,session數據也就消失了。
PHP框架中session是一個數組,可以通過$_SESSION['key'] = $value的方式對session賦值。如:
$_SESSION['myname'] = 'Helllo';
echo $_SESSION['myname'];
使用session的前提,是程序已經打開session_start()。
新版sp框架中,session_start()默認沒有開啟,如果需要開啟,請把session_start()放在init()或者入口文件內。
使用session過程中,會遇到輸出header與session沖突的問題。通常會提示:
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at xxx.php:29) in xxx
引起該問題的原因,是在session_start()之前,存在輸出的header或字符。這里給以下幾個建議:
- 全局的header輸出,要放在入口文件全局定義的位置,不要放入口文件的開頭。當然,如果是單個header輸出,如文件下載,則可以直接放到某個控制器/方法中。
- 檢查文件是否帶BOM或其他輸出字符,BOM可以通過編輯器來檢查,而輸出字符,則可以通過在瀏覽器中另存源文件下來,用記事本打開,看到亂碼或空格就證明有輸出字符。這些字符可以通過把源文件放到記事本中另存為來消除。
- 可以在入口文件全局定義位置中,加入ob_start();來避免出錯。
> session通常還有許多設置,如將session存放到數據庫中等等。詳情請見php.net文檔。
這些session的設置,均可以放到入口文件全局定義位置來設置。
session存放的位置,是在服務器的系統臨時中,所以一般而言,session文件中的內容不會被訪問者瀏覽到。
**PHP框架中cookie的使用**
cookie在程序中使用通常作為“保持登錄”或是跟蹤訪問者操作等。和session不同,cookie存放的位置,是在訪問者的瀏覽器緩存中。
cookie的使用有幾個要素:過期時間、路徑、域。cookie可以通過setcookie函數設置:
setcookie ( COOKIE名字, COOKIE值, 過期時間, 路徑, 域名 );
- 過期時間:默認是會話時間長度,和session相同。
- 路徑:默認是“/”,設置在當前域名下COOKIE生效的路徑。
- 域:域名,默認是當前網站域名。可以設置成
- “.speedphp.com”來使得整個網站(包括二級域名)都可以讀取該COOKIE。
$value = '這里是設置的值';
setcookie("TestCookie", $value); // 該cookie的過期時間是會話時間
setcookie("TestCookie", $value, time()+3600); // 該cookie的過期時間是1小時,當前時間time() 加 3600秒(1小時)
setcookie("TestCookie", $value, time()+3600, "/bbs/", ".speedphp.com");// 該cookie的過期時間是1小時,只在speedphp.com及speedphp.com二級域名的bbs目錄下使用。
cookie值可以用$_COOKIE數組來獲取。
echo $_COOKIE['TestCookie'];
**cookie測試問題**
由于COOKIE是先發送到訪問者瀏覽器中,然后再被瀏覽器發送到服務器給PHP程序。所以在調試COOKIE的時候,要刷新一下頁面才能看到剛才setcookie的值。也就是
// 第一個頁面
// 假設COOKIE的TestCookie沒有值
setcookie("TestCookie", "我是值");
echo $_COOKIE['TestCookie']; // 不會輸出值,因為瀏覽器沒有發送COOKIE上來。
// 第二個頁面
echo $_COOKIE['TestCookie']; // 輸出“我是值”,因為PHP已經讀取到瀏覽器發送的值。
- 自述
- 一、入門教程
- 1. 開始使用SpeedPHP
- 2. Hello World
- 3. 理解MVC
- 4. 制作留言本
- 5. 數據操作及Ajax
- 二、框架概述
- 1. 特色
- 2. 版權及開源協議
- 3. 開發環境
- 4. 編碼版本
- 5. SAE平臺使用
- 三、開發指南
- 1. 開發流程
- 2. 架構及擴展
- 3. 程序目錄結構
- 4. 命名建議
- 5. 安全建議
- 6. 用戶自定義
- 7. 模塊modules
- 四、訪問交互
- 1. 表單提交及數據獲取
- 2. session/cookie的使用
- 3. 偽靜態及URL跳轉
- 4. 使用frameset
- 5. 模板引擎特性和使用方法
- 五、數據操作
- 1. 建立數據模型類
- 2. 數據操作教程
- 3. 分頁
- 4. SQL支持及關聯實現
- 5. 多數據庫、主從庫配置