PHP Session 與 Cookie 的比較
- Session:儲存於伺服器端,不用擔心用戶禁用session的問題,但計錄檔案的負荷由伺服器承擔。
- Cookie:儲存於用戶端,可能有用戶端禁用cookie,但伺服器不需承擔計錄檔案的負荷。
第一步、啟用 Session : session_start()
在你使用 session 來記錄用戶的資訊前,要先用 session_start() 這個函式,告訴系統準備開始使用,請記住 session_start() 一定要放在網頁的最上方還沒有輸出任何東西之前,也就是類似下面這樣,如果前面出現了任何的輸出可是會出錯的唷!這也是一般人常碰到的問題。
<?php session_start(); ?>
<html>
<body>
......something
</body>
</html>
<html>
<body>
......something
</body>
</html>
第二步、給變數值並記錄在伺服器上
我們設定了一個 number 的變數,並給他一個值 =10,接著這個 number=10 就存在伺服器上囉!基本上這樣最簡單的 session 就設定好了。
我們設定了一個 number 的變數,並給他一個值 =10,接著這個 number=10 就存在伺服器上囉!基本上這樣最簡單的 session 就設定好了。
第三步、取得 session 的值,使用 $_SESSION["變數名稱"];
第四步、刪除 session
其實預設伺服器會自動刪除超過有效時間的 session,但有的情況是必須讓用戶操作的時候可以自己刪除,像是會員登出,主動清除後馬上就變成登出狀態,這個時候可以使用以下兩種方式清除:
session_unregister()在PHP5中不再使用,可將之打入冷宮。
<?php其實預設伺服器會自動刪除超過有效時間的 session,但有的情況是必須讓用戶操作的時候可以自己刪除,像是會員登出,主動清除後馬上就變成登出狀態,這個時候可以使用以下兩種方式清除:
- unset($_SESSION['變數名稱']);
- session_destroy();
常用的 Session 函式庫
- session_start:啟用一個新的或開啟正在使用中的session。
- session_destroy:清除正在使用中的 session。
- session_name:取得正在使用中的名稱或將名稱更新為新的名稱。
- session_module_name:取得或更新正在使用中的模組。
- session_save_path:存取目前使用中的 session 路徑。
- session_id:存取目前使用中的 id。
- session_register:註冊一組新的 session。
- session_unregister:刪除一個正在使用中的 session。
- session_is_registered:檢查目前使用中是否已經有此變數。
- session_decode:資料解碼,解碼成功回傳 true。
- session_encode:資料編碼,編碼成功回傳 true。
例子如下:
session_start();
echo $_SESSION['name'];
echo $_SESSION['passwd'];
echo date('Y m d H:i:s', $_SESSION['time']);
?>
<?php
session_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>";
?>
下面舉例說明:
第一種情況:
page1.php
<?php
session_start();
$_SESSION['var1']="中華人民共和國";
$url="<a href="."\"s2.php\">下一頁</a>";
echo $url;
?>
page2.php
<?php
session_start();
echo "傳遞的session變量var1的值為:".$_SESSION['var1'];
?>
運行以上代碼,在客戶端cookie正常的情況下,應該可以在得到結果「中華人民共和國」。
現在你手動關閉客戶端的cookie,再運行,可能得不到結果了吧。如果得不到結果,再「設置php.ini中的session.use_trans_sid = 1或者編譯時打開打開了--enable-trans-sid選項」,又得到結果「中華人民共和國」
第二種途徑:
s1.php
<?php
session_start();
$_SESSION['var1']="中華人民共和國";
$sn = session_id();
//PHP5定義了一個常量SID來表示session_id(),$url還可以寫成$url='<a href="page2.php?' . SID . '">下一頁</a>';
$url="<a href="."\"s2.php?s=".$sn."\">下一頁</a>";
echo $url;
?>
session_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>";
?>
第一種情況:
page1.php
<?php
session_start();
$_SESSION['var1']="中華人民共和國";
$url="<a href="."\"s2.php\">下一頁</a>";
echo $url;
?>
page2.php
<?php
session_start();
echo "傳遞的session變量var1的值為:".$_SESSION['var1'];
?>
運行以上代碼,在客戶端cookie正常的情況下,應該可以在得到結果「中華人民共和國」。
現在你手動關閉客戶端的cookie,再運行,可能得不到結果了吧。如果得不到結果,再「設置php.ini中的session.use_trans_sid = 1或者編譯時打開打開了--enable-trans-sid選項」,又得到結果「中華人民共和國」
第二種途徑:
s1.php
<?php
session_start();
$_SESSION['var1']="中華人民共和國";
$sn = session_id();
//PHP5定義了一個常量SID來表示session_id(),$url還可以寫成$url='<a href="page2.php?' . SID . '">下一頁</a>';
$url="<a href="."\"s2.php?s=".$sn."\">下一頁</a>";
echo $url;
?>
s2.php
<?php
session_id($_GET['s']);
session_start();
echo "傳遞的session變量var1的值為:www.2cto.com".$_SESSION['var1'];
?>
<?php
session_id($_GET['s']);
session_start();
echo "傳遞的session變量var1的值為:www.2cto.com".$_SESSION['var1'];
?>
Reference : http://fecbob.pixnet.net/blog/post/39268315-php-session%E7%9A%84%E8%A9%B3%E7%B4%B0%E5%88%86%E6%9E%90-
沒有留言:
張貼留言