龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

PHP会话控制:Session与Cookie详解(7)

时间:2014-09-30 02:28来源:网络整理 作者:网络 点击:
分享到:
php.ini中两个和该选项相关的配置参数: 复制代码 代码如下: session.use_cookies = 1 //是否使用cookies(默认值为1) session.use_only_cookies=1 //为1时只使用cookie;为0时

php.ini中两个和该选项相关的配置参数:

复制代码 代码如下:

session.use_cookies = 1  //是否使用cookies(默认值为1)
session.use_only_cookies=1  //为1时只使用cookie;为0时可使用cookie和其它方式,这时如果客户端cookie可用,则session还是默认用cookie(默认值为1)

注意:如果客户的浏览器是支持cookie的,强烈推荐“session.use_only_cookies = 1”,当session.use_only_cookies为有效时,即使想通过URL来传递session id也会被认为无效,这样可以减少通过sessionid被攻击的可能性。上面两个配置,在php代码页面中设置方式:

复制代码 代码如下:

ini_set('session.use_cookies','1');
ini_set('session.use_only_cookies','1');

IE下丢失session,每次刷新页面,都会生成新的sessionID(Firefox浏览器都正常)

如果你的服务器或站点出现这种问题,请正确配置session.cookie_path网站域,如果配置错误可能会引起以下常见故障:

(1)客户端的每个PHPSESSID在服务器端都会一对一的对应生成一个独立的session记录存储在服务器端,故服务器端session文件冗余将会增多(GC回收机制异常时、站点访问量较大时)

(2)使用session记录相关信息的站点可能在除Firefox(Chrome未测试)之外的浏览器下访问出现问题,例如:购物车无法记录选购项目、站点登录失败等

复制代码 代码如下:

session.cookie_path 是指 session 生效的网站域;
session.save_path 是指存储 session 临时文件的路径。
例如:session.cookie_path= /        //cookie的有效路径

补充:如果所有浏览器访问刷新产生新sessionID,请检查客户端是否禁用了cookie。

session简单实例

使用session防止表单重复提交:

复制代码 代码如下:

<?php
session_start();
$_SESSION["num"] = 0;
if(isset($_POST["action"] && $_POST["action"]=="post")){
if($_SESSION["num"] == 0){
    echo "提交成功!";
   $_SESSION["num"] = 1;
}else{
   echo "请勿重复提交!";
}
}
?>

使用session方式的登录验证实例代码:

复制代码 代码如下:

<?php
session_start();//启动session,必须放在第一句,否则会出错。
if($_GET['out']){
unset($_SESSION['id']);
unset($_SESSION['pass']);
}
if($_POST['name']&&$_POST['password']){
<span style="font-family: 微软雅黑;"><span style="font-size: 16px;line-height:2.5em;">//用于设置session</span></span>
$_SESSION['id']=$_POST['name'];
$_SESSION['pass']=$_POST['password'];
}
if($_SESSION['id']&&$_SESSION['pass']){
echo "登录成功!
用户ID:".$_SESSION['id']."<br />用户密码:".$_SESSION['pass'];
echo "<br />";
echo "<a href='login.php?out=out'>注销session</a>";
}
 
?>
<form action="login.php" method="post">
用户ID:<input type="text" name="name" />
密码:<input type="password" name="password" />
<br />
<input type="submit" name="submit">
</form>

使用cookie方式的登录验证实例代码:

复制代码 代码如下:

if($_GET['out']){ //用于注销cookies
setcookie('id',"");
setcookie('pass',"");
echo "<script>location.href='login.php'</script>"; //因为cookies不是及时生效的,只有你再次刷新时才生效,所以,注销后让页面自动刷新。
}
if($_POST['name']&&$_POST['password']) //如果变量用户名和密码存在时,在下面设置cookies
{ //用于设置cookies
setcookie('id',$_POST['name'],time()+3600);
setcookie('pass',$_POST['password'],time()+3600);
echo "<script>location.href='login.php'</script>"; //让cookies及时生效
}
if($_COOKIE['id']&&$_COOKIE['pass']){ //cookies设置成功后,用于显示cookies
echo "登录成功!<br />用户名:".$_COOKIE['id']."
密码:".$_COOKIE['pass'];
echo "<br />";
echo "<a href='login.php?out=out'>注销cookies</a>";
}
?>
<form action="" method="post">
用户ID:<input type="text" name="name" />
密 码:<input type="password" name="password" />
<br />
<input type="submit" name="submit">
</form>

使用session随机码验证投票合法性:
复制代码 代码如下:

list.php 选项页面
session_start();
$tokenKey = md5(rand(1,100));
$_SESSION['tokenKey'] = $tokenKey;
注意:在传值时同时传入随机码$tokenKey

精彩图集

赞助商链接