當用戶禁用cookie后,服務器每次session_start() 都會 創建一個全新的seesion文件,后果就是無法讓多個頁面php,去共享同一份session文件.
如何解決問題? 從cookie sessoin 和http協議入手解決
請問? 如果客戶端禁用cookie,怎樣實現session技術共享多個頁面?
答:
(1)在每個超鏈接上添加一個PHPSESSID=sesssionId;同時在每個頁面加入:
if(isset($_GET[‘PHPSESSID’]){
//設置sesssion_id
session_id($_GET[‘PHPSESSID’]);
}
session_start();...
(2)使用常量SID
使用方法如下:
在超鏈接action header(“Location: xx”) 可以直接拼接SID常量即可
echo "<ahref='ShopProcess.php?bookid=sn003&bookname=西游記&".SID."'>西游記</a><br/>";
(3) 可以啟用session.use_trans_sid 指定是否啟用透明SID 支持 即可以這樣設置
ssssion. use_trans_sid = 1 ,這樣重啟apache即可生效.
具體處理代碼:
MyHall.php
<?php
if(isset($_GET['PHPSESSID'])){
session_id($_GET['PHPSESSID']);
}
session_start();
//echo "sid====".SID;
echo "<h1>歡迎購買</h1>";
echo "<ahref='ShopProcess.php?bookid=sn001&bookname=天龍八部&".SID."'>天龍八部</a><br/>";
echo "<a href='ShopProcess.php?bookid=sn002&bookname=紅樓夢&".SID."'>紅樓夢</a><br/>";
echo "<ahref='ShopProcess.php?bookid=sn003&bookname=西游記&".SID."'>西游記</a><br/>";
echo "<ahref='ShopProcess.php?bookid=sn004&bookname=聊齋&".SID."'>聊齋</a><br/>";
echo "<hr/>";
echo "<a href='ShowCart.php?".SID."'>查看購買到的商品列表</a>";
?>
ShopProcess.php
<?php
//接收用戶購買請求,並把書保存到session中.
//保存到session中
if(isset($_GET['PHPSESSID'])){
session_id($_GET['PHPSESSID']);
}
session_start();
$bookid=$_GET['bookid'];
$bookname=$_GET['bookname'];
$_SESSION[$bookid]=$bookname;
echo "<br/>購買商品成功!";
echo "<br/><ahref='MyHall.php?".SID."'>返回購物大廳繼續購買</a>";
?>
ShowCart.php
<?php
echo "<h1>購物車商品有</h1>";
//這里不能讓服務器創建一個新的session
if(isset($_GET['PHPSESSID'])){
session_id($_GET['PHPSESSID']);
}
session_start();
foreach($_SESSION as $key=>$val){
echo "<br/> 書號--$key 書名--$val";
}
?>
再看一個session的實際運用案例
如何防止用戶非法登錄.
loginProcess.php 增加:
if($name!=""){
//把登陸信息寫入cookie 'loginname':$name
//把登陸表 把登陸的人ip id..
//合法
session_start();
$_SESSION['loginuser']=$name;
header("Location:empManage.php?name=$name");
exit();
}
在編寫commmon.php文件中添加了一個函數
//把驗證用戶是否合法封裝函數
function checkUserValidate(){
session_start();
//先寫在封
if(empty($_SESSION['loginuser'])){
header("Location:login.php?errno=1");
}
}
在需要防止用戶非法登錄頁面中引入這樣兩句(這兩句話,放在頁面的開頭)
require_once 'common.php';
checkUserValidate();