首頁 >後端開發 >php教程 >PHP會話追蹤二(42)

PHP會話追蹤二(42)

WBOY
WBOY原創
2016-08-08 09:23:12958瀏覽

Session

什麼是Session
??Session從用戶訪問頁面開始,到斷開與網站連接為止,形成一個會話的生命週期。在會話期間,分配客戶唯一的一個SessionID,用來識別當前用戶,與其他用戶進行區分。
??Session會話時,SessionID會分別保存在客戶端和伺服器端兩個位置,對於客戶端使用臨時的Cookie保存(Cookie名稱為PHPSESSID)或透過URL字串傳遞,伺服器端也以文字檔案形式保存在指定的Session目錄中。
??Session透過ID接受每一個存取請求,從而識別當前使用者、追蹤和保持使用者俱體資料,以及Session變數(在Session活動期間,可在S​​ession中儲存數字或文字資料),例如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

<?<span>php
session_start(); </span><span>//</span><span>使用SESSION前必须调用该函数。</span>$_SESSION[‘name’]=”我是黑旋风李逵!”; <span>//</span><span>注册一个SESSION变</span><span>量
$_SESSION[‘passwd’]</span>=<span>”mynameislikui”;
$_SESSION[‘time’]</span>=<span>time();
echo ‘<br</span>/><a href=<span>“page2.php”>通过COOKIE传递SESSION
<</span>/a>’; <span>//</span><span>如果客户端支持cookie,可通过该链接传递session到</span><span>下一页。
echo ‘<br</span>/><a href=“page2.php?<span>’. SID . ‘”>通过URL
传递SESSION<</span>/a>’;<span>//</span><span>客户端不支持cookie时,使用该办法传递</span><span>session.
</span>?>

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,目前會話沒有啟動的話,則傳回空字串。
??使用此函數必須在啟動會話之前:session_start();

<span>查看当前SessionID
</span><?<span>php
session_start();
echo &ldquo;当前的session id 为:&rdquo;.session_id();
</span>?><span>??设置SessionID
</span><?<span>php
session_id(&ldquo;ABC2008&rdquo;);</span><span>//</span><span>必须在session_start()之前</span><span>session_start();
echo &ldquo;修改的session id 为:&rdquo;.session_id();
</span>?>

更換session_id,不影響訊息

??session_regenerate_id()更改成功則傳回true,失敗則傳回false。

??使用此函數可以讓目前session更換SESSIONID,但不會改變目前session的其他資訊。

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

session_name

session_name()傳回目前session的name或改變目前session的name。

??如果要改變目前session的name,必須在session_start()
之前呼叫函數。注意:session_name不能只由數字組
成,它至少包含一個字母。否則會在每時每刻都產生一個
新的session id.
session改名範例:

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

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 解决会话传递问题

<span>page1.php
??<</span>?<span>php
session_start();
$_SESSION[‘var1’]</span>=<span>“中华人民共和国”;
$url</span>=“<a href=‘s2.php’>下一页</<span>a>”;
echo $url;
</span>?<span>><br></span>

<span>??page2.php
??<</span>?<span>php
session_start();
echo “传递的session变量var1的值:”.$_SESSION[‘var1’];
</span>?<span>>
??现在你手动关闭客户端的cookie,再运行就得不到结果了</span>

  2 第一种途径

设置php.ini中的session.use_trans_sid= 1
??编译时打开打开了--enable-trans-sid选项”
??注:Linux适用,Windows不适用

以上就介绍了PHP会话跟踪二(42),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn