第6章 資料儲存與檔案處理(6-1 Session記錄物件)
- 帖子
- 1206
- 主題
- 396
- 精華
- 113
- 積分
- 1747
- 點名
- 1
- 作業系統
- Vista
- 軟體版本
- Office 2003
- 閱讀權限
- 200
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2010-5-1
- 最後登錄
- 2026-10-2
      
|
第6章 資料儲存與檔案處理(6-1 Session記錄物件)
6-1 Session記錄物件
Session 物件為紀錄使用者的相關資訊,提供使用者再次對此網頁伺服器要求時作確認,例如使用者帳號與密碼的確認,有 Session 物件的建立,來保留身分認證的結果,則使用者不用於每一頁網頁登錄時都需輸入密碼作確認。
Session 物件是用來記錄『變數』值的, Session 物件是一對一的,對於所有的連線瀏覽者而言,都個別擁有一個『私用』的 Session 物件。
Session為一個陣列形式的記錄物件,在使用Session之前必須先初始它,也就是告知PHP我們要使用Session了:
Sessiont_start 初始函數- bool session_start ( void)
複製代碼 接著,加入Session變數到陣列中成為陣列元素的註標,此字串陣列註標就是Session變數名:
Sessiont_register 註冊函數- bool session_register (mixed name [, mixed ...])
複製代碼 完成Session的變數註冊後才能存取Session變數資料值,例如:- <?
- session_register("myname"); //註冊Session變數
- $_SESSION["mynam"]="Charles"; //設定Session變數值
- echo $_SESSION["mynam"]; //輸出Session變數值
- ?>
複製代碼 在上例中,筆者並沒有使用「session_start()」函數告知PHP我們要使用Session陣列,為何能直接使用Session呢?原因在於PHP為我們預設了一個名為「PHPSESSID」的Session陣列了!不過千萬要小心!這麼做的話,在後續的程式敘述中將不能改變Session變數的值,除非您在變動Session變數值之前先行呼叫「session_start()」函數!
在實際應用時並不需要先使用「session_register()」函數先行Session變數註冊,在指定Session變數資料值時也就同時進行了Session變數註冊。 |
|
|
心安,平安
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!
|
|
|
|
|
- 帖子
- 46
- 主題
- 8
- 精華
- 0
- 積分
- 60
- 點名
- 0
- 作業系統
- windows 7 64bit
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- 台灣桃園
- 註冊時間
- 2012-3-14
- 最後登錄
- 2018-11-27

|
8#
發表於 2012-7-30 01:15
| 只看該作者
回復 7# 小誌
TO小誌大,了解了,謝謝您細心的教學,目前我正在學習這章節。
經過這一番回答,對於!=的用意更加的深刻了。:) |
|
|
Learn Learn Learn
|
|
|
|
|
- 帖子
- 1206
- 主題
- 396
- 精華
- 113
- 積分
- 1747
- 點名
- 1
- 作業系統
- Vista
- 軟體版本
- Office 2003
- 閱讀權限
- 200
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2010-5-1
- 最後登錄
- 2026-10-2
      
|
7#
發表於 2012-7-27 01:31
| 只看該作者
附圖的錯誤: 請打開資料夾的寫入權限,一般是將 everyone 設為可讀寫
以你的附圖錯誤資訊而言,是將 C:\Windows\Temp 這個資料夾設為everyone皆可讀寫
抱歉: <> 是不等於,但不是PHP語言的不等於
PHP的不等於是 !=
這篇教學誤植的部分我已更正 |
|
|
心安,平安
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!
|
|
|
|
|
- 帖子
- 46
- 主題
- 8
- 精華
- 0
- 積分
- 60
- 點名
- 0
- 作業系統
- windows 7 64bit
- 軟體版本
- office2003
- 閱讀權限
- 20
- 性別
- 男
- 來自
- 台灣桃園
- 註冊時間
- 2012-3-14
- 最後登錄
- 2018-11-27

|
6#
發表於 2012-7-26 15:52
| 只看該作者
本帖最後由 pix756 於 2012-7-26 17:15 編輯
小誌大大你好,我是使用本機的localhost會出現像下圖錯誤訊息。
請問小誌大大,我有哪裡設定錯誤嗎?
謝謝~
另外有個地方不懂就是
if($_REQUEST['userid']<>"charlies"){
中的<>是小於大於嗎?
我一直不懂,
請小誌大大為我解惑。
萬分感謝您。 |
|
|
Learn Learn Learn
|
|
|
|
|
- 帖子
- 1206
- 主題
- 396
- 精華
- 113
- 積分
- 1747
- 點名
- 1
- 作業系統
- Vista
- 軟體版本
- Office 2003
- 閱讀權限
- 200
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2010-5-1
- 最後登錄
- 2026-10-2
      
|
5#
發表於 2011-4-19 17:59
| 只看該作者
還有一件事要提醒您:「session_start()」函數的呼叫如同header()函數一般,只可用在尚未有任何資料輸出至瀏覽器之前才可呼叫,否則會出現如下圖的錯誤:
圖6-5_1 |
|
|
心安,平安
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!
|
|
|
|
|
- 帖子
- 1206
- 主題
- 396
- 精華
- 113
- 積分
- 1747
- 點名
- 1
- 作業系統
- Vista
- 軟體版本
- Office 2003
- 閱讀權限
- 200
- 性別
- 男
- 來自
- 台灣
- 註冊時間
- 2010-5-1
- 最後登錄
- 2026-10-2
      
|
3#
發表於 2011-4-19 17:56
| 只看該作者
雖然在表面上看來,這個計數器是OK的,但是,Session 物件現在紀錄的變數資料只與目前瀏覽連線者有關,與其他的瀏覽連線者一點關係都沒有,也就是說目前所讀取的 Session 物件內容是讀取目前瀏覽連線者『私用』的 Session 物件,比較下圖兩瀏覽器畫面,不同瀏覽器執行ex6_2.php,上網者只要按下瀏覽器上的『重新整理』按鈕後,您會發現計數器將會再次的自動加一,但兩個瀏覽器的結果是不相干的,由此可證明:Session 物件紀錄的變數資料只與目前瀏覽連線者有關,與其他的瀏覽連線者一點關係都沒有。
圖6-3 不同瀏覽器獲得不同結果。
在範例ex6_2.php中使用了一個「session_is_registered()」函數,用來判斷Session變數是否已經註冊:
Sessiont_is_registered函數- bool session_is_registered (string name)
複製代碼 如果Session變數已經在Session陣列中註冊過了,則session_is_registered( )函數傳回True值,否則回傳False值。 |
|
|
心安,平安
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!
|
|
|
|
|