當 PHP 在使用 Session 的功能之前,由於 php.ini 的一些設定值會影響 Session 函數的使用,例如:session.save_path、session.name、session.save_handler、session.cookie_lifetime、session.use_cookies。
可以在 php.ini 中直接修改以後再重新啟動 Web Server。另外,也可以利用 ini_set( )函數來設定,設定方式如下:ini_set("參數名稱", "新的參數值"); 例如:ini_set("session.save_handler", "files");
<?php session_start();
$orderTime = new DateTime("now", new DateTimeZone('Asia/Taipei'));
$_SESSION['orderTime'] = $orderTime -> format("Y年m月d日H時i分s秒"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Session 變數傳遞範例</title>
</head>
<body>
<h1>Session 變數傳遞範例</h1><br/>
<?php
echo "訂餐時間:".$_SESSION['orderTime']."<br/>";
?>
<fieldset name="Group1">
<legend>點菜單</legend>
<form action="myorder.php" method="post">
<label id="Label1">餐桌:</label><input name="desk" type="number" min="1" max="9" size="2" /><br/><br/>
<input name="oredr[]" type="checkbox" value="菜色 1"/> 菜色 1, 100元
<input name="oredr[]" type="checkbox" value="菜色 2"/> 菜色 2, 200元
<input name="oredr[]" type="checkbox" value="菜色 3"/> 菜色 3, 300元
<input name="oredr[]" type="checkbox" value="菜色 4"/> 菜色 4, 400元
<input name="oredr[]" type="checkbox" value="菜色 5"/> 菜色 5, 500元
<br/><br/>
<input name="Reset1" type="reset" value="reset" />
<input name="Submit1" type="submit" value="submit" />
</form>
</fieldset>
</body>
</html>
<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Session 變數接收範例</title>
</head>
<body>
<h1>Session 變數接收範例</h1><br/>
<?php
$desk = $_POST['desk'];
$oredr = $_POST['oredr'];
echo "來源網址:".$_SERVER['HTTP_REFERER']."<br/>";
?>
<center>
<table border="3" cellpadding="8">
<div>
<?php
echo "訂餐時間:".$_SESSION['orderTime']."<br/>";
$price = 0;
echo "<br/><h2>《 點菜明細表 》</h2><br/>";
echo "<h2>餐桌: ".$desk."</h2><br/>";
echo "<tr><td> <b>菜色</b> </td><td> <b>價格</b> </td></tr>";
foreach ($oredr as $value) {
echo "<tr>";
$dish = $value;
switch($dish){
case '菜色 1':
echo "<td> ".$value." </td><td> 100 元 </td>";
$price = $price + 100;
break;
case '菜色 2':
echo "<td> ".$value." </td><td> 200 元 </td>";
$price = $price + 200;
break;
case '菜色 3':
echo "<td> ".$value." </td><td> 300 元 </td>";
$price = $price + 300;
break;
case '菜色 4':
echo "<td> ".$value." </td><td> 400 元 </td>";
$price = $price + 400;
break;
default:
echo "<td> ".$value." </td><td> 500 元 </td>";
$price = $price + 500;
}
echo "</tr>";
}
echo "<tr><td> <b>總價</b> </td><td> <b>".$price."</b> 元 </td></tr>";
?>
</div>
</table>
</center>
</body>
</html>
<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Session 變數產生、刪除與註銷</title>
</head>
<body>
<?php
function show(){
echo "session_id = ".session_id()."<br/>";
if (isset($_SESSION['apple'])){echo "apple = ".$_SESSION['apple']."<br/>";}
if (isset($_SESSION['banana'])){echo "banana = ".$_SESSION['banana']."<br/>"; }
if (isset($_SESSION['lemon'])){echo "lemon = ".$_SESSION['lemon']."<br/>";}
echo "<p>";
$i=0;
do {echo "-";$i=$i+1;}
while($i<=9);
echo "</p>";
}
$_SESSION['apple']="蘋果";
echo "Session 變數產生 apple 並給值<br/>";show();
$_SESSION['banana']="香蕉";
$_SESSION['lemon']="檸檬";
echo "Session 變數產生 banana、lemon 並給值<br/>";show();
unset($_SESSION['banana']);
echo "Session 變數刪除 banana <br>";show();
echo "取消所有 Session 變數 (但保存 Session_id )<br/>";
session_unset( );show();
echo "註銷 Session_id 和 Session 變數<br/>";
session_destroy( );show();
?>
</body>
</html>
<!-- 表單傳值與 Session 緩存應用:s1.php -->
<form action="s2.php" method="post">Name 1
<input type="text" size="10" name="name1">
<input type="reset"><input type="submit">
</form>
<?php // 表單傳值與Session 緩存應用:s2.php
ob_start();
session_start();
// $_SESSION['name1'] = $_POST['name1'] ? $_POST['name1'] : 'Name1 is Null'; //合併運算子
$_SESSION['name1'] = $_POST['name1'] ?: 'Name1 is Null'; //合併運算子
?>
<form action="s3.php" method="post">Name 2
<input type="text" size="10" name="name2">
<input type="reset"><input type="submit">
</form>
<?php // 表單傳值與Session 緩存應用:s3.php
ob_start();
session_start();
//$_SESSION['name2'] = $_POST['name2'] ? $_POST['name2'] : 'Name2 is Null'; //合併運算子
$_SESSION['name2'] = $_POST['name2'] ?: 'Name2 is Null'; //合併運算子
header("Location:s4.php");
?>
<?php // 表單傳值與Session 緩存應用:s4.php
ob_start();
session_start();
echo "Name1: ".$_SESSION['name1']."<br>";
echo "Name2: ".$_SESSION['name2'];
?>
Cookie 又稱為「小甜餅」,其類型為「小型文字檔案」,可以作為網站辨別用戶身分 (即儲存在用戶端上的加密資料)。
Cookie 儲存在客戶端中,按在客戶端中的儲存位置,可分為記憶體 Cookie (非持久Cookie)和硬碟 Cookie (持久Cookie)。
記憶體 Cookie 由瀏覽器維持,儲存在記憶體中,當瀏覽器關閉以後就會消失了,其存在時間是短暫的。
硬碟 Cookie 儲存在硬碟裡,有一個過期時間,除非用戶手動清理或是到了過期時間,否則硬碟 Cookie 不會被刪除,其存在時間是長期的。
Cookie 只有一個名為 setcookie() 函數設定 cookie,setcookie() 函數使用前不能有任何輸出,若與header() 或是 session_start() 函數合用時,需在網頁第一行加上 ob_start() 函數才可以避免錯誤的發生。
setcookie() 語法:setcookie(name, value, expire, path, domain, security)。
name:Cookie 的變數名稱。
value:Cookie 型態變數的內容,移除 Cookie 變數可將變數內容清空。
expire:如果沒有設定保存期限(到期暨期滿時間點),當關閉瀏覽器時Cookie 就會消失。
path:Cookie 存放路徑省略時,預設為網站根目錄「/」。
domain:Cookie 在指定網域內有效,省略時預設值是沒有設定網域。
security:Cookie 預設是 0 (省略時) 沒有加密的方式傳送,設為 1 時必須以 SSL 方式,https 加密方式才能傳送。
註:User 瀏覽器接受 cookie 的啟用路徑:設定/隱私權和安全性/網站設定/Cookie 和網站資料
Cookie 在一小時後過期範例:<br/>
<?php
// value 可以使用 "輸入內容" 或 使用 $變數
$myName = "稼漢";
ob_start();
setcookie("Chuang", $myName, time()+3600);
//Cookie 存在時間為 3600 秒
if ( $_COOKIE['Chuang'] == "稼漢" ){
echo $_COOKIE['Chuang']."<br/>";
// setcookie("Chuang"); // 清除cookie;
echo "User 瀏覽器接受 cookie";
}else{
echo "注意! User 瀏覽器不接受 cookie";
}
?>
<!--
程式先送出一個 cookie;if檢查 cookie 的值是否存在;如果存在,則清除 cookie 並告知 cookie 已開,否則告知 cookie 未開。
-->
删除 cookie?<br/>
<?php
// value = null 或 時間設置為過期
ob_start();
setcookie("Chuang", "稼漢", time()-3600);
if(isset($_COOKIE['Chuang'])){
echo $_COOKIE['Chuang'];
}else{
echo "Chuang 沒有資料!";
}
?>
使用陣列存取多筆 Cookie 資料範例:<br/>
<?php
// value 可以使用 "輸入內容" 或 使用 $變數
try{
$myName1 = "莊"; $myName2 = "稼"; $myName3 = "漢";
ob_start();
setcookie("Chuang[0]", $myName1, time()+3600);
setcookie("Chuang[1]", $myName2, time()+3600);
setcookie("Chuang[2]", $myName3, time()+3600);
if($_COOKIE["Chuang"][0] != $myName1){
throw new Exception("請設定「允許網站儲存及讀取 Cookie 資料」,謝謝!"); }
foreach($_COOKIE["Chuang"] as $key => $value){
echo $value."<br/>";
}
} catch(Exception $e){ echo $e->getMessage(); }
?>