php5 的 session 详解之四: session 跨页传递 问题的三条途径

明白了以上的道理,我们就可以得出解决 session 跨页传递问题的三条途径:
1 、设置php.ini中的session.use_trans_sid = 1或者编译时打开了--enable-trans-sid选项,让PHP自动跨页传递session id。
2、 手动通过 URL 传值、隐藏表单传递 session id。
3、 用文件、数据库等形式保存 session_id,在跨页过程中手动调用。
下面举例说明:

第一种情况:

//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();
$url="<a href="."\"s2.php?s=".$sn."\">下一页</a>";
//PHP5 定义了一
个 常 量 SID 来 表 示 session_id() , $url 还 可 以 写 成 $url='<a
href="page2.php?' . SID . '">下一页</a>';
echo $url;
?>
//s2.php
<?php
session_id($_GET['s']);
session_start();
echo "传递的 session 变量 var1 的值为:".$_SESSION['var1'];
?>

第三种途径:
<!--login.html-->
<!DOCTYPE html="">HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Login</title>
<meta http-equiv="Content-Type" content="text/html; charset=??????">
</head>
<body>
请登录:
<form method="post" action="mylogin1.php">
用户名:<input type="text" ><br>
口
令:<input type="password" ><br>
<input type="submit" value="登录"></form>
</body>
</html>

//mylogin1.php
<?php
$name=$_POST['name'];
$pass=$_POST['pass'];
if(!$name || !$pass) {
echo "用户名或密码为空,请<a href=\"login.html\">重新登录</a>";
die();
}
if (!($name=="laogong" && $pass=="123")) {
echo "用户名或密码不正确,请<a href=\"login.html\">重新登录</a>";
die();
}
//注册用户
ob_start();
session_start();
$_SESSION['user']= $name;
$psid=session_id();
$fp=fopen("e:\\tmp\\phpsid.txt","w+");
fwrite($fp,$psid);
fclose($fp);
//身份验证成功,进行相关操作
echo "已登录<br>";
echo "<a href=\"mylogin2.php\">下一页</a>";
?>
//mylogin2.php
<?php$fp=fopen("e:\\tmp\\phpsid.txt","r");
$sid=fread($fp,1024);
fclose($fp);
session_id($sid);
session_start();
if(isset($_SESSION['user']) && $_SESSION['user']="laogong" ) {
echo "已登录!";
}
else {
//成功登录进行相关操作
echo "未登录,无权访问";
echo "请<a href=\"login.html\">登录</a>后浏览";
die();
}
?>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值