php中session有时候能获取,有时候无法获取。。。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php中session有时候能获取,有时候无法获取。。。相关的知识,希望对你有一定的参考价值。
<?php
session_start();
$conn=mysql_connect("localhost","root","root");
if(!$conn)
die("连接失败".mysql_errno());
mysql_query("set names utf8");
mysql_select_db("student",$conn)or die(mysql_errno());
$id=$_POST["id"];
$password=$_POST["password"];
$name=$_POST["name"];
$sex=$_POST["sex"];
$grade=$_POST["grade"];
$_SESSION["id"]=$id;
$_SESSION["name"]=$name;
$sql="insert into stu(id,password,name,sex,grade)values('$id','$password','$name','$sex','$grade')";
//echo $sql;
mysql_query($sql)or die('执行失败');
echo "<script>alert('注册成功!');location.href='login.php'</script>";
?>
上面是创建session页面,下面页面为输出session值,但不能输出,上次能输出,这次就不行了才一天时间。。。
<?php
@session_start();
echo $_SESSION["name"];
echo "欢迎你,".$_SESSION["name"];
?>
可以通过如下方式来设置:
<?php
session_start();
// 保存一天
$lifeTime = 24 * 3600;
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
?> 参考技术A 你重新执行,完了还能有输出么?
没有输出,很可能是浏览器清了cookie缓存,或者配置中,缓存设置时间很短
Fetch Api 无法从 PHP 服务器获取 Session
【中文标题】Fetch Api 无法从 PHP 服务器获取 Session【英文标题】:Fetch Api unable to get Session from PHP server 【发布时间】:2016-08-13 00:01:11 【问题描述】:我在我的应用程序中使用 Fetch Api。
我有一个 PHP 服务器页面来获取之前已经定义的会话数据。看起来像这样:
<?php
header('Content-Type: application/json; charset=UTF-8');
header('Access-Control-Allow-Origin: *');
session_start();
// $_SESSION['data'] already defined before
$result = array();
// print_r($_SESSION['data']);
if (isset($_SESSION['data']))
$result = $_SESSION['data'];
$result['code'] = 'ok';
else
$result['code'] = 'error';
echo json_encode($result, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
我还有另一个 html 页面来获取会话数据。看起来像这样:
<script>
$(function()
// use $.ajax
$.ajax(
url: 'session.php',
dataType: 'json'
)
.done(function(res)
console.log(res);
);
// end
// use fetch
fetch('session.php').then(function(res)
if (res.ok)
res.json().then(function(obj)
console.log(obj);
);
);
// end
);
</script>
问题是,当我使用 $.ajax() 时,会话数据可以正确显示。但是当我使用 fetch() 时,会话数据是未定义的。
那么,出了什么问题,我该如何解决?谢谢!
【问题讨论】:
您使用ajax
,但未通过session_id
和start_session
开始新会话。但是当您在浏览器上请求此脚本时,您 session_id 保存在浏览器 cookie 中,您可以获得正确的会话。
【参考方案1】:
如果您希望fetch
发送cookie,您必须提供credentials
选项。
详情请见https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch#Parameters。
【讨论】:
凭证可以设置为'same-origin' 在提供凭证选项时,'include' 和 'same-origin' 有什么区别?我似乎无法在任何地方找到此信息。 @kojow7 Check the MDN docs (我试图在这里复制粘贴,但一团糟)。基本上,这个答案的相关示例,使用“包含”,mysite.com 可以从 yoursite.com 获得会话,但使用“同源”mysite.com 无法获得 yoursite.com 的会话。【参考方案2】:jquery ajax 是一个常见的 ajax 请求,浏览器正在发送带有会话 ID 的 cookie 标头,用于标识您的会话。
fetch 不会 - 而是创建一个没有任何数据的新会话 使用 url 或 header 发送 php session id
看看:http://php.net/manual/en/session.idpassing.php
【讨论】:
以上是关于php中session有时候能获取,有时候无法获取。。。的主要内容,如果未能解决你的问题,请参考以下文章
php为啥session能在当前页面中输出值,在其他页面从session中取值的时候是NULL