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

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

时间:2014-09-30 02:28来源:网络整理 作者:网络 点击:
分享到:
demo2.php php $sid = $_GET['sid']; if(!empty($sid)){ session_id($sid); session_start(); }else{ session_start(); $sid = session_id(); } $id = $_POST['id']; $key = 'poll_'.$id; if($id!=''){ echo $key =

demo2.php
<?php
$sid = $_GET['sid'];
if(!empty($sid)){
  session_id($sid);
  session_start();
}else{
  session_start();
  $sid = session_id();
}
$id = $_POST['id'];
$key = 'poll_'.$id;
if($id!=''){
  echo $key = 'poll'.$id;
  if(!empty($_SESSION[$key])){
    $_SESSION[$key]=$_SESSION[$key] + 1;
  }else{
    $_SESSION[$key]=1;
    setcookie($key ,$id+1,time()+3600*24);
  }
  echo '<script>alert("success");javascript:location.href="demo.php?sid='.$sid.'";</script>';
}else{
  echo '<script>alert("failed!ID Null");javascript:history.back(-1);</script>';
}
?>

除此之外,我们还可以将客户端PHPSESID存放到文件中,如:

复制代码 代码如下:

demo.php
session_start();
$_SESSION['blogdomain']= 'http://blog.jb51.net';
$sid=session_id();
$fp=fopen("D:\tmp\websid.txt","w+");
fwrite($fp,$sid);
fclose($fp);
echo '<a href="demo2.php">demo2</a>';

demo2.php
$fp=fopen("D:\tmp\websid.txt","r");
$sid=fread($fp,1024);
fclose($fp);
session_id($sid);
session_start();
print_r($_SESSION);

当客户端禁用cookie,可以通过以下几种方式改变session对客户端cookie的依赖,使session抛开客户端cookie:

1、设置php.ini中的session.use_trans_sid = 1或者编译时打开打开了--enable-trans-sid选项,让PHP自动跨页传递session id。当session.use_trans_sid为有效时,ession.use_only_cookies一定要设置为无效0。

2、手动通过URL传值、隐藏表单传递session id。

3、用文件、数据库等形式保存session_id,在跨页过程中手动调用。

PHP也提供一个函数:

复制代码 代码如下:

output_add_rewrite_var  ( string $name , string $value ) # 变量名 变量值

说明:此函数给URL重写机制添加名/值对。 这种名值对将被添加到URL(以GET参数的形式)和表单(以input隐藏域的形式),当透明URL重写用 session.use_trans_sid 开启时同样可以添加到session ID。 要注意,绝对URL(http://jb51.net/..)不能被重写。此函数的行为由url_rewriter.tags php.ini 参数控制。

复制代码 代码如下:

<?
session_start();
output_add_rewrite_var('PHPSESSID',session_id ());
echo '<a href="demo2.php">demo</a>';
?>

这样sessionID会跟在URL后面而且from中会出现sessionID的hidden值。

改变session客户端ID保存方式:

session.use_cookies //控制客户端保存SessionID时使用哪一种方式,当它为“1”时,就说明启动了session cookie(初始值为1)
可以使用上面我们提到的函数来查询得到目前的session id:echo $_COOKIE["PHPSESSID"];
但是,如果client的浏览器不支持cookie的话,即使session.use_cookies这个参数的值等于“1”,用上述的查询也只会得到null。

精彩图集

赞助商链接