php高手处理接纳post办法无法保存session问题ITeye - 乐橙lc8

php高手处理接纳post办法无法保存session问题ITeye

2019-01-11 22:12:13 | 作者: 昌燎 | 标签: 办法,问题,文件 | 浏览: 2179

在PHP中运用过SESSION的朋友或许会碰到这么一个问题,SESSION变量不能跨页传递。呈现这个问题的原因有以下几点:

1、客户端禁用了cookie

2、阅读器呈现问题,暂时无法存取cookie

3、php.ini中的session.use_trans_sid = 0或许编译时没有翻开--enable-trans-sid选项

Session贮存于效劳器端(默许以文件办法存储session),依据客户端供给的session id来得到用户的文件,获得变量的值,session id能够运用客户端的Cookie或许Http1.1协议的Query_String(便是拜访的URL的“?”后边的部分)来传送给效劳器,然后效劳器读取Session的目录……。也便是说,session id是获得存储在效劳上的session变量的身份证。当代码session_start();运转的时分,就在效劳器上发生了一个session文件,随之也发生了与之仅有对应的一个session id,界说session变量以必定方式存储在方才发生的session文件中。经过session id,能够取出界说的变量。跨页后,为了运用session,你有必要又履行session_start();将又会发生一个session文件,与之对应发生相应的session id,用这个session id是取不出前面说到的第一个session文件中的变量的,由于这个session id不是翻开它的“钥匙”。假如在session_start();之前加代码session_id($session id);将不发生新的session文件,直接读取与这个id对应的session文件。

PHP中的session在默许情况下是运用客户端的Cookie来保存session id的,所以当客户端的cookie呈现问题的时分就会影响session了。有必要留意的是:session不必定有必要依靠cookie,这也是session比较cookie的高超之处。当客户端的Cookie被禁用或呈现问题时,PHP会主动把session id附着在URL中,这样再经过session id就能跨页运用session变量了。但这种附着也是有必定条件的,即“php.ini中的session.use_trans_sid = 1或许编译时翻开翻开了--enable-trans-sid选项”。

理解了以上的道理,现在咱们来抛开cookie运用session,首要途径有三条:

1、设置php.ini中的session.use_trans_sid = 1或许编译时翻开翻开了--enable-trans-sid选项,让PHP主动跨页传递session id。

2、手动经过URL传值、躲藏表单传递session id。

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

比如:

s1.php
?php
session_start();
$_SESSION[var1]="中华人民共和国";
$url=" a href="."\"s2.php\" 下一页 /a
echo $url;
?
s2.php
?php
session_start();
echo "传递的session变量var1的值为:".$_SESSION[var1];
?

运转以上代码,在客户端cookie正常的情况下,应该能够在得到成果“中华人民共和国”。

现在封闭客户端的cookie,再运转,或许得不到成果。假如得不到成果,再“设置php.ini中的session.use_trans_sid = 1或许编译时翻开翻开了--enable-trans-sid选项”,又得到成果“中华人民共和国”

这也便是上面所说的途径1。

下面再说途径2:

修正的代码如下:

s1.php
?php
session_start();
$_SESSION[var1]="中华人民共和国";
$sn = session_id();
$url=" a href="."\"s2.php?s=".$sn."\" 下一页 /a
echo $url;
?
s2.php
?php
session_id($_GET[s]);
session_start();
echo "传递的session变量var1的值为:".$_SESSION[var1];
?
办法3仍是经过比如来阐明:
login.html
!DOCTYPE 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 name="login" method="post" action="mylogin1.php"
用户名: input type="text" name="name"
口 令: input type="password" name="pass"
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 "已登录";
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();
}
?

相同请封闭cookie测验,用户名:laogong 暗码:123 这是经过文件保存session id的,文件是:e:\tmp\phpsid.txt,请依据自己的体系决议文件名或途径。

至于用数据库的办法,我就不举比如了,与文件的办法相似。

总结一下,上面的办法有一个共同点,便是在前一页获得session id,然后想办法传到下一页,鄙人一页的session_start();代码之前加代码session_id(传过来的session id);
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表乐橙lc8立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章