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有效期默认是1440秒(24分钟),也就是说,客户端超过24分钟没有刷新,当前session就会失效。当然如果用户关闭了浏览器,会话也就结束了,Session自然也不存在了!

可以通过如下方式来设置:
<?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_idstart_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

php网页跳转无法获取session值

memcache 获取key的方法,查询session存储

Fetch Api 无法从 PHP 服务器获取 Session

如何让php获取session的值

php 如何通过session id获取session里的数据?