PHP session_start()问题解疑(详细介绍)

本文,将这些问题,做一个简单的汇总,以便大家查阅。
1.
错误提示
Warning: Cannot send session cookie - headers already sent
Warning: Cannot send session cache limiter - headers already sent
分析及解决办法
这一类问题,的原因是你在程序中使用PHP session_start()时,之前已经有实际的html内容输出了。或许你说,我没有啊,我只不过是echo或print一条消息了。很抱歉,你的 echo或print语句所产生的输出,就是实际的html内容输出。解决此类问题的办法是,将你的session_start()调到程序的第一行。

2.
错误提示
Warning: open(F:/689phpsessiondatasess_66a39376b873f4daecf239891edc98b5, O_RDWR) failed
分析及解决方法
出现这样的错误语句一般是因为你的php.ini中关于session.save_path一项没有设置好,解决的方法是将 session.save_path和session.cookie_path 设置置为
session_save_path = c: emp
session.cookie_path = c: emp
然后在c:目录下建立一个temp目录,即可

3.
错误提示
Warning: Trying to destroy uninitialized session in
分析及解决方法
出类这样的提示,一般情况都是你直接调session_destroy()函数造成的。很多的朋友认为session_destroy()函数可以独立的 运行,其实不然。解决的方法是在你调session_destroy()函数之前,要用PHP session_start()开启session的功能。

4.问题:怎么获得当前session的id值呢?
最简单的方法是:
echo SID;
你会发现的。

5.问题:我的程序,在调用header函数之前没有任何的输出,虽然我include了一个config.php文件,但在config.php 文件中也没有任何的输出,为什么session还是会报出与问题1同样的错误呢,是不是因为我在header之前用了PHP session_start()的缘故呢?

答:或许你确实认真的检查了你的php程序,在引用header()之前确实也没有任何的输出,并且在你的include文件中也没有任何的输出! 但是你是否用光标键在?>这个PHP代码结束语句后移动检查呢?那么你会发现在?>这个后面,有一个空行或几个空格,你删除了这几个空行或空 格,那么问题就解决了。
注:此问题,会出PHP4.1.2中,更高版本,没有测试过。

6.问:用session做登录主页面后,其它页面怎么用session限制登录。。。
答:最简单的方法是
    session_start();  
    if(!session_registered
    ('login')
    ││ $login != true) {  
    echo "你没有登陆";  
    exit;  
    }

7.问:我用session_register()注册了session变量,可是当我用header或用javascript的重定向语句,那么 在一下页面中,我却访问不到session所注册的变量值。请问如何解决?
问题的程序片段:
    session_start();  
    $ ok  = 'love you';  
    session_register('ok');  
    header("location : next.php");  
    ?> 
    next.php  
    session_start();  
    echo $ok;  
    ?> 
解决的方法:
当你用header函数或window.location这样的功能后,你上一个页面所注册的session变量,就会容易的丢失,关于这个问题的原因, 至今仍没有一个详细的回答。
不过有解决的方法。如下所示
header("Location: next.php" ."?" . SID);
在跳转到下一页面的时候,将session的当前id做为一个参数,传到后一个页面。

8.session如何传数组
    session_register
    ('data');  
    $ data = array (1,2,3,4);
方法是先注册后赋值

9.问题9:我是不是可以用像$HTTP_GET_VARS['**']方式来访问session值呢?
回答:可以,你可以使用如下global数组来访问session,以加强网页的安全性
$HTTP_SESSION_VARS
$_SESSION
例程:
    session_start();  
    $ username  = 'stangly.
    wrong';  
    session_register('
    username'); 
    echo $HTTP_SESSION_VARS
    ['username'];  
    echo ' 
    ';  
    echo $_SESSION
    ['username'];  
    ?>   
请参照此例程修改符合您自己的程序。

问题10:session_unregister() 和 session_destroy() 有何区别?
session_unregister()函数主要作用是注消当前的一sion.(译自于php.net)
例程:
    if(isset($_COOKIE[session_name()])) {  
    session_start();  
    session_destroy();  
    unset($_COOKIE[session_name()]);  
    }
以上,所述是一些新手经常遇到的PHP session_start()问题。或许是详述不清,难免有误所在,请高手指点批评。

(0)

相关推荐

  • php环境下利用session防止页面重复刷新的具体实现

    b.php的代码 复制代码 代码如下: <?php //只能通过post方式访问 if ($_SERVER['REQUEST_METHOD'] == 'GET') {header('HTTP/1.1 404 Not Found'); die('亲,页面不存在');} session_start(); $fs1=$_POST['a']; $fs2=$_POST['b']; //防刷新时间,单位为秒 $allowTime = 30; //读取访客ip,以便于针对ip限制刷新 /*获取真实ip开始*/

  • php中session退出登陆问题

    在php中,如果使用的session来判断用户是否登陆,退出时,则可以如此: session_start();session_destroy(); 会话即表示已经结束.下一句话应该写js,使页面跳转了. <script>alert("已经退出登陆!");location.href="login.php";</script> 如果是个框架页呢,就不要直接用location了.因为这样会在一个小框架页内跳转,本意一定是要整个框架都跳转过去啊.所以

  • 教你如何使用php session

    PHP session用法其实很简单它可以把用户提交的数据以全局变量形式保存在一个session中并且会生成一个唯一的session_id,这样就是为了多了不会产生混乱了,并且session中同一浏览器同一站点只能有一个session_id,下面我们一起来看看关于session使用方法.如何使用session,凡是与session有关的,之前必须调用函数session_start();为session赋值很简单,如: 复制代码 代码如下: <?phpSession_start();$Name =

  • PHP关于IE下的iframe跨域导致session丢失问题解决方法

    今天搞的一个登录页面,被别的网站用iframe嵌进去后,死活无法登录(只在IE中存在这种情况). 很明显,session无法被保存.但是直接在地址栏打开那个登录页面,一切都正常啊.真是奇怪啊. 在网上搜索了一下.发现这个问题还真有不少人提及到.最后的解决方法是在那个登录页面里加上以下代码: 复制代码 代码如下: <span style="font-family:Microsoft YaHei; font-size:14px">header('P3P: CP="AL

  • PHP中怎样保持SESSION不过期 原理及方案介绍

    PHP中如何保持SESSION以及由此引发的一些思考  最近的一个项目,里面有一个比较大的表单,用户完成它需要很多时间,很多用户花了千辛万苦完成之后,一提交发现SESSION过期,系统退出了,所以引起了研究如何设置SESSION以及保持SESSION在线的需要,下面是一些心得体会. 什么是SESSION?按照WIKI的解释,SESSION是存在于两个通信设备间的交互信息,在某一时间建立,经过一定的时间后失效.常见的SESSION有:TCP SESSION.WEB SESSION(HTTP SES

  • php Session存储到Redis的方法

    当然要写先安装php的扩展,可参考这篇文章:Redis及PHP扩展安装修改php.ini的设置 复制代码 代码如下: session.save_handler = redissession.save_path = "tcp://127.0.0.1:6379″修改后重启php-fpm或nginx,phpinfo() session redis如果不想修改php.ini可这样 复制代码 代码如下: ini_set("session.save_handler","redi

  • 注意:php5.4删除了session_unregister函数

    前几天安装了dedecms系统,当在后台安全退出的时候,后台出现空白,先前只分析其他功能去了,也没太注意安全,看了一下安全退出的代码,是这样写的: 复制代码 代码如下: function exitUser()  {    ClearMyAddon();    @($this->keepUserIDTag);    @session_unregister($this->keepUserTypeTag);    @session_unregister($this->keepUserChann

  • php将session放入memcached的设置方法

    可以修改php.ini文件的情况下: 1.修改php.ini中的 复制代码 代码如下: session.save_hander = memcache;session.save_path = "tcp://host:端口号";//例如:session.save_path = "tcp://127.0.0.1:11211"; 2.正常存取session的值就OK了. 不可以修改php.ini文件的情况下: a.动态修改php.ini中的设置. 复制代码 代码如下: in

  • php中session使用示例

    1.初始化(使用session前都要使用,一个页面用一个就可以了) 复制代码 代码如下: session_start(); 2.保存 复制代码 代码如下: $_SESSION[$sessionName]=$value; (value可以是double,bool,int,数组,object类型的数据) 例子: 复制代码 代码如下: $_SESSION['LoginUser']="zs"; 3.取出指定 例子: 复制代码 代码如下: $uName=$_SESSION['LoginUser'

  • php5.3 不支持 session_register() 此函数已启用的解决方法

    php从5.2.x升级到5.3.2.出来问题了.有些原来能用的程序报错了.报错内容是Deprecated: Function session_register() is deprecated查了一下是5.3这个session_register就不让用了,降回去?不爽.搜了一把,有个解决方法是写一个函数 复制代码 代码如下: <?php // Fix for removed Session functions function fix_session_register(){ function se

  • PHP修改session_id示例代码

    复制代码 代码如下: if(isset($_GET["se"])){ $se = $_GET["se"]; }else{ return; } if(!empty($se)){ echo("receive se: ".$se."</br></br>"); //接受的的session为$se session_id($se); //设置$se位session_id session_start(); //开启s

  • php把session写入数据库示例

    复制代码 代码如下: <?phpclass session_handler { protected $maxlifetime = null; protected $dbHandle = null; public $config = null; public static function init($args) {  return new self($args); } public function __construct($args) { $this->config = $args;  $t

  • php session_start()出错原因分析及解决方法

    错误提示: Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent 原因:在session_start()之前如果有输出内容,会出错, 解决办法:在session_start()之前加上ob_start(); index.php  复制代码 代码如下: <?php error_reporting(-1); ob_start();//不加会

  • session在php5.3中的变化 session_is_registered() is deprecated in

    在php5.3中运行书中代码会有如下提示:Function session_is_registered() is deprecated inFunction session_register() is deprecated in 意思是说这两个函数是不赞成的,弃用的. 下面是php官方手册上的代码,注释部分已经说明了不赞成用session_register() 复制代码 代码如下: <?php// Use of session_register() is deprecated 不赞成用sessi

  • PHP Session 变量的使用方法详解与实例代码

    当您运行一个应用程序时,您会打开它,做些更改,然后关闭它.这很像一次会话.计算机清楚你是谁.它知道你何时启动应用程序,并在何时终止.但是在因特网上,存在一个问题:服务器不知道你是谁以及你做什么,这是由于 HTTP 地址不能维持状态.通过在服务器上存储用户信息以便随后使用,PHP session 解决了这个问题(比如用户名称.购买商品等).不过,会话信息是临时的,在用户离开网站后将被删除.如果您需要永久储存信息,可以把数据存储在数据库中. 把手册抄一下,然后每个都试试然后写出来,方便自己查阅滴,谁

  • php设置session值和cookies的学习示例

    第一步:先在本地写一个登陆页面和一个内容页面(登陆了才能进去)吧.代码大致如下: 下面是login.php,用于请求登陆的,通过post传递参数,如果登陆成功就会注册session. 复制代码 代码如下: <?phpsession_start(); if (isset($_POST['username'])) {    $username = $_POST['username'];    $password = $_POST['password']; if ($username == 'admi

  • php session劫持和防范的方法

    session 数据暴露会话数据常会包含一些个人信息和其它敏感数据.基于这个原因,会话数据的暴露是被普遍关心的问题.一般来说,暴露的范围不会很大,因为会话数据是保存在服务器环境中的,而不是在数据库或文件系统中.因此,会话数据自然不会公开暴露.使用SSL是一种特别有效的手段,它可以使数据在服务器和客户端之间传送时暴露的可能性降到最低.这对于传送敏感数据的应用来说非常重要.SSL在HTTP之上提供了一个保护层,以使所有在HTTP请求和应答中的数据都得到了保护.如果你关心的是会话数据保存区本身的安全,

  • PHP中session变量的销毁

    1.何为session?相当于一个客户端(可以是浏览器.app.ftp等其他,而且同一个浏览器多开几个又算是不同的客户端)对服务器的一个访问,这个期间服务器为此建立一个唯一的标示(session_id session_name),其实也就是一个数组Array(),Session的开始和结束并不以业务上的输入用户名密码开始,也不以关闭浏览器和网页刷新而结束 2.session变量的销毁程序代码<?phpsession_unset();session_destroy();?> session_un

随机推荐