PHP會話跟蹤二(42)

來源:互聯網
上載者:User
Session

什麼是Session
??Session從使用者訪問頁面開始,到斷開與網站串連為止,形成一個會話的生命週期。在會話期間,分配客戶唯一的一個SessionID,用來標識目前使用者,與其他使用者進行區分。
??Session會話時,SessionID會分別儲存在用戶端和伺服器端兩個位置,對於用戶端使用臨時的Cookie儲存(Cookie名稱為PHPSESSID)或者通過URL字串傳遞,伺服器端也以文字檔形式儲存在指定的Session目錄中。
??Session通過ID接受每一個訪問請求,從而識別目前使用者、跟蹤和保持使用者具體資料,以及Session變數(在Session活動期間,可在Session中儲存數字或文字資料),比如session_name等等,這些變數資訊儲存在伺服器端。
??SessionID可以作為會話資訊儲存到資料庫中,進行Session持久化,這樣可以跟蹤每個使用者的登陸次數、線上與否、線上時間等。

cookie和session在php中的使用區別:

cookie和session都可以暫時儲存在多個頁面中使用的變數,但是它們有本質的差別。
??cookie存放在用戶端瀏覽器中,
??session儲存在伺服器上。
??它們之間的聯絡是session ID 一般儲存在cookie中,或者放在URL上。
??禁用cookie的方法:(點擊IE中的“工具”—“Internet選項”,在彈出的對話方塊裡點擊“安全”—“自訂層級”項,將“允許每個對話COOKIE”設為禁用)

實現簡單的會話

使用會話的基本步驟如下:
??開始一個會話
??註冊會話變數
??使用會話變數
??登出變數並銷毀會話

  1 開始一個會話

session_start():開始一個會話或者返回已經存在的會話。
說明:這個函數沒有參數,且傳回值均為true。如果你使用基於cookie的session,那麼在使用session_start()之前瀏覽器不能有任何輸出,否則會發生以下錯誤:
Warning: Cannot send session cache limiter -headers already sent (output started at/usr/local/apache/htdocs/cga/member/1.php:2)…………

  2 註冊一個會話變數

PHP5使用$_SESSION[‘xxx’]=xxx註冊SESSION全域變
量。和GET,POST,COOKIE的使用方法相似。
??注意:session_register(),session_unregister(),session_is_registered()在php5下不再使用,除非在php.ini裡把register_globle設為on,不過出於安全考慮,強烈建議關閉register_globle。HTTP_SESSION_VARS也不提倡使用了,官方建議用$_SESSION代替之。

  3 使用會話變數

要使一個會話變數在某個範圍內可以使用,必須首先使用session_start()函數啟動一個會話。這樣,就可以通過$_SESSION超級全域數組訪問這個變數了。
如:echo $_SESSION[‘myvar’];
??使用前,判斷變數是否是登入的會話變數。
if(isset($_SESSION[‘myvar’]))

  4 page1.php

<?phpsession_start(); //使用SESSION前必須調用該函數。$_SESSION[‘name’]=”我是黑旋風李逵!”; //註冊一個SESSION變量$_SESSION[‘passwd’]=”mynameislikui”;$_SESSION[‘time’]=time();echo ‘<br/><a href=“page2.php”>通過COOKIE傳遞SESSION</a>’; //如果用戶端支援cookie,可通過該連結傳遞session到下一頁。echo ‘<br/><a href=“page2.php?’. SID . ‘”>通過URL傳遞SESSION</a>’;//用戶端不支援cookie時,使用該辦法傳遞session.?>

session_id

session_id()用於設定或取得當前session_id。php5中
既可以使用session_id(),也可以通過附加在url上的SID
取得當前會話的session_id和session_name。
??如果session_id()有具體指定值的話,將取代當前的SESSIONID值。
當cookie沒有被禁用時,如果指定了一個session_id()值,每次啟動session_start()都會往用戶端發送一個cookie值。不論當前SESSIONID是否與指定值相等。
??如果session_id()沒有指定值,則返回當前SESSIONID,當前會話沒有啟動的話,則返回Null 字元串。
??使用該函數必須在啟動會話之前:session_start();

查看當前SessionIDphpsession_start();echo “當前的session id 為:”.session_id();?>??設定SessionIDphpsession_id(“ABC2008”);//必須在session_start()之前session_start();echo “修改的session id 為:”.session_id();?>

更換session_id,不影響資訊

??session_regenerate_id()更改成功則返回true,失敗則返回false。
??使用該函數可以讓當前session更換SESSIONID,但不改變當前session的其他資訊。

<?phpsession_start();$old_sessionid= session_id();session_regenerate_id();$new_sessionid= session_id();echo "原始SessionID: $old_sessionid<br/>";echo "新的SessionID: $new_sessionid<br/>";echo"<pre>";print_r($_SESSION);echo"</pre>";?>

session_name

session_name()返回當前session的name或改變當前session的name。
??如果要改變當前session的name,必須在session_start()
之前調用該函數。注意:session_name不能只由數字組
成,它至少包含一個字母。否則會在每時每刻都產生一個
新的session id.
session改名樣本:

<?php$previous_name= session_name("WebsiteID");session_start();echo "新的session名為:$previous_name<br/>";?>

session跨頁傳遞問題

session跨頁傳遞需要考慮三種情況:
??用戶端禁用了cookie。
??瀏覽器出現問題,暫時無法存取cookie
??php.ini中的session.use_trans_sid= 0或者
編譯時間沒有開啟--enable-trans-sid選項

解決session跨頁傳遞問題的三條途徑

1、設定php.ini中的session.use_trans_sid= 1或者編譯時間開啟開啟了--enable-trans-sid選項,讓PHP自動跨頁傳遞session id。
??2、手動通過URL傳值、隱藏表單傳遞session id。
??3、用檔案、資料庫等形式儲存session_id,在跨
頁過程中手動調用。

  1 解決會話傳遞問題

page1.php??<?phpsession_start();$_SESSION[‘var1’]=“中華人民共和國”;$url=“<a href=‘s2.php’>下一頁</a>”;echo $url;?>

??page2.php??<?phpsession_start();echo “傳遞的session變數var1的值:”.$_SESSION[‘var1’];?>??現在你手動關閉用戶端的cookie,再運行就得不到結果了

  2 第一種途徑

設定php.ini中的session.use_trans_sid= 1
??編譯時間開啟開啟了--enable-trans-sid選項”
??註:Linux適用,Windows不適用

以上就介紹了PHP會話跟蹤二(42),包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.