关于session_start()这个问题,其实网上很多解决的方法,论坛也好多人回答这类的问题, 现在的状况是依然有警告提示Warning:

session_start() [function.session-start]: Cannot send session cookie - headers already sent in C:\php\phpdesigner_output_tmp.php on line 2

不过,代码可以成功运行,$_SESSION的值可以传递到别的页面 ,现在先说我自己的问题.我在网上找session_start()的问题的时候,有的帖子提到要修改

session.save_path =c:\tmp 和 session.cookie_path =/ 这两个路径为c:\tmp,然后再添加一个文件夹.

但我自己是问题是,session.cookie_path  的值应该是=/  惭愧的是我现在还不明白什么是这个值应该是默认路径吧.

其实相关的session_start()的问题还有要将session.auto_start = 0改为1,out.put_buffery=on 或者修改成4096 或者session_start()前面加ob_start();

还有cache-limiter= ;空,还有apache的缓存是否有开等等,不过对我的问题也没有帮助而已.下面是我在找问题的答案的时候找到的一些关于session_start()的问题的总结

session问题集锦   

对于PHP的session功能,始终找不到合适的答案,尤其是一些错误,还有一些没有错误的结果,最可怕的就是后者,一直为许多的初学者为难。就连有些老手,有时都被搞得莫名其妙。本文,将这些问题,做一个简单的汇总,以便大家查阅。

1. 错误提示

Warning: Cannot send session cookie - headers already sent Warning: Cannot send session cache limiter - headers already sent

分析及解决办法 这一类问题,的原因是你在程序中使用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()函数之前,要用session_start()开启session的功能。

4.问题:怎么获得当前session的id值呢?

最简单的方法是: echo SID; 你会发现的。

5.问题:我的程序,在调用header函数之前没有任何的输出,虽然我include了一个config.php文件,但在config.php文件中也没有任何的输出,为什么session还是会报出与问题1同样的错误呢,是不是因为我在header之前用了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.问题:我是不是可以用像$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()]);

}

以上,所述是一些新手经常遇到的问题。或许是详述不清,难免有误所在,请高手指点批评。

==================================================================================

=====session的部分设置问题====

首先打开php.ini文件,找到session的部分:(分号后面的是注释)

[Session]
; Handler used to store/retrieve data.
session.save_handler = files   ;    这个是session的方式,默认的files就可以了,代表用文件储存

; Argument passed to save_handler.  In the case of files, this is the path  where data files are stored.
session.save_path
= /tmp ;      这个是session的保存路径,比如你是c盘,那么默认就是c:/tmp, 所以如果出现“Warning:
open(/tmpsess_cc8b04f146a1e0494bc464305da92ea1,
O_RDWR)  failed”这样子的错误,你可以修改这个路径,或者在根目录下面建立一个tmp的文件夹

; Whether to use cookies.
session.use_cookies = 1 ;    sessionid的传递方式,默认是cookie,推荐使用

; Name of the session (used as cookie name).
session.name = PHPSESSID ;    sessionid的名称,保存在cookie里面的,要避免同名

; Initialize session on request startup.
session.auto_start = 0 ;    是否自动启动session,默认为不是,不需要修改

; Lifetime in seconds of cookie or, if 0, until browser is restarted.
session.cookie_lifetime = 0 ;    sessionid的cookie生存时间,0代表知道浏览器关闭

; The path for which the cookie is valid.
session.cookie_path = / ;    sessionid的cookie路径,不需要修改

; The domain for which the cookie is valid.
session.cookie_domain = ;    ;sessionid的cookie域名,不需要修改

; Handler used to serialize data.  php is the standard serializer of PHP.
session.serialize_handler = php ;    保存data的默认文件名后缀,不需要修改

; Percentual probability that the 'garbage collection' process is started  on every session initialization.
session.gc_probability = 1

; After
this number of seconds, stored data will be seen as
'garbage' and  cleaned up by the garbage collection
process.
session.gc_maxlifetime = 1440 ;    session文件的保存时间

; Check HTTP Referer to invalidate externally stored URLs containing ids.
session.referer_check = ; How many bytes to read from the file.
session.entropy_length = 0 ; Specified here to create the session id.
session.entropy_file = ;session.entropy_length = 16 ;session.entropy_file = /dev/urandom

; Set to {nocache,private,public} to determine HTTP caching aspects.
session.cache_limiter = nocache ; Document expires after n minutes.
session.cache_expire = 180 ; use transient sid support if enabled by compiling with --enable-trans-sid.
session.use_trans_sid
= 1 url_rewriter.tags =
"a=href,area=href,frame=src,input=src,form=fakeentry"
======================================================================
session 的生命周期是多长

1 浏览器结束时其生命周期也同时结束,但是档案仍然存在于 /tmp/(sess_???)
2 下次重新开浏览器时会重新分配 sessionID,如果你使用 session_id() 把以前的 ID 带回来,
则会去读取残存在 /tmp 处的 sess_???, 取回你之前所有已经设定的参数
3 可以在 php.ini 里修改 session 档案残存的时间 session.gc_maxlifetime = 1440 ; after this number of seconds, stored
; data will be seen as 'garbage' and
; cleaned up by the gc process 默认是 1440 秒,24分钟
=========================================================================

使用无限生命期Session的方法
   在PHP4.0中加入了对Session的支持,方便了我们很多程序,比如购物车等等!

在很多论坛中,Session也用于处理用户的登陆,记录下用户名和密码,使得用户不必每次都输入自己的用户名和密码!但是一般的Session的生命
期有限,如果用户关闭了浏览器,就不能保存Session的变量了!那么怎么样可以实现Session的永久生命期呢?
 
 大家知道,Session储存在服务器端,根据客户端提供的SessionID来得到这个用户的文件,然后读取文件,取得变量的值,SessionID
可以使用客户端的Cookie或者Http1.1协议的Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取
Session的目录……
   
   要实现Session的永久生命期,首先需要了解一下php.ini关于Session的相关设置(打开php.ini文件,在“[Session]”部分):
   1、session.use_cookies:默认的值是“1”,代表SessionID使用Cookie来传递,反之就是使用Query_String来传递;
   2、session.name:这个就是SessionID储存的变量名称,可能是Cookie,也可能是Query_String来传递,默认值“PHPSESSID”;
   3、session.cookie_lifetime:这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废……就是因为这个所以Session不能永久使用!
   4、session.gc_maxlifetime:这个是Session数据在服务器端储存的时间,如果超过这个时间,那么Session数据就自动删除!
   还有很多的设置,不过和本文相关的就是这些了,下面开始讲使用永久Session的原理和步骤。
   
   前面说过,服务器通过SessionID来读取Session的数据,但是一般浏览器传送的SessionID在浏览器关闭后就没有了,那么我们只需要人为的设置SessionID并且保存下来,不就可以……
   如果你拥有服务器的操作权限,那么设置这个非常非常的简单,只是需要进行如下的步骤:
   1、把“session.use_cookies”设置为1,打开Cookie储存SessionID,不过默认就是1,一般不用修改;
   2、把“session.cookie_lifetime”改为正无穷(当然没有正无穷的参数,不过999999999和正无穷也没有什么区别);
   3、把“session.gc_maxlifetime”设置为和“session.cookie_lifetime”一样的时间;
   设置完毕后,打开编辑器,输入如下的代码:
------------------------------------------------------------------------------------

<?php  session_start();
session_register('count');
$count++;
echo $count;
?>
------------------------------------------------------------------------------------

然后保存为“session_check.php”,用浏览器打开“session_check.php”,看看显示的是不是“1”,再关闭浏览器,然
后再打开浏览器访问“session_check.php”,如果显示“2”,那么恭喜了,你已经成功;如果失败的话,请检查你前面的设置。

但是如果你没有服务器的操作权限,那就比较麻烦了,你需要通过PHP程序改写SessionID来实现永久的Session数据保存。查查
php.net的函数手册,可以见到有“session_id”这个函数:如果没有设置参数,那么将返回当前的SessionID,如果设置了参数,就会
将当前的SessionID设置为给出的值……
   只要利用永久性的Cookie加上“session_id”函数,就可以实现永久Session数据保存了!
   但是为了方便,我们需要知道服务器设置的“session.name”,但是一般用户都没有权限查看服务器的php.ini设置,不过PHP提供了一个非常好的函数“phpinfo”,利用这个可以查看几乎所有的PHP信息!
------------------------------------------------------------------------------------

------------------------------------------------------------------------------------
   打开编辑器,输入上面的代码,然后在浏览器中运行这个程序,会见到PHP的相关信息(如图1所示)。其中有一项“session.name”的参数(图中已经标出),这个就是我们需要的服务器“session.name”,一般是“PHPSESSID”。
   记下了SessionID的名称后,我们就可以实现永久的Session数据储存了!
   打开编辑器,输入下面的代码:
------------------------------------------------------------------------------------
session_start();  // 启动Session
session_register('count');  // 注册Session变量Count
if(isset($PHPSESSID)) {
   session_id($PHPSESSID);
}  // 如果设置了$PHPSESSID,就将SessionID赋值为$PHPSESSID,否则生成SessionID
$PHPSESSID = session_id();  // 取得当前的SessionID
$count++;  // 变量count加1
setcookie('PHPSESSID', $PHPSESSID, time()+3156000);  // 储存SessionID到Cookie中
echo $count;  // 显示Session变量count的值
?>
------------------------------------------------------------------------------------

保存之后,利用和刚才拥有服务器权限时候的检测一样的方法,检测是否成功的保存了SessionID。
后记:
   其实真正的永久储存是不可能的,因为Cookie的保存时间有限,而服务器的空间也有限……
但是对于一些需要保存时间比较长的站点,以上方法就已经足够了!

关于session_start()这个问题的更多相关文章

  1. linux 下 PHP Notice: session_start(): ps_files_cleanup_dir 报错 问题剖析

    如果在ubuntu/Debian下, 采用apt安装的PHP, 那么在使用Session的时候, 就可能会有小概率遇到这个提示. 代码如下: PHP Notice: session_start(): ...

  2. php session_start() 非常慢 问题原因查找

    最近在做东西的时候发现一个问题 有一个接口挂了 ,然后进行测试访问地址的时候,浏览器就一直处于等待响应的状态 怎么访问都不行,只有重启web服务器才行. 如果不重启web服务器进行代码调试,总发现在s ...

  3. A session had already been started - ignoring session_start() 解决方法

    A session had already been started - ignoring session_start() --已经存在一个session 打开了 -- 忽略sessioon_star ...

  4. session_start()一些问题

    session问题集锦 对于PHP的session功能,始终找不到合适的答案,尤其是一些错误,还有一些没有错误的结果,最可怕的就是后者,一直为许多的初学者为难.就连有些老手,有时都被搞得莫名其妙.本文 ...

  5. session_start保存的客户端cookie的值什么时候改变

    //cookie记录的session_id立刻改变了session_start();echo "old:".session_id();session_regenerate_id() ...

  6. php的session_start

    如果session使用cookie记录,那么在session_start时会设置一个cookie,参数取决于php.ini的设置,当然也可以通过session_set_param在程序里设置.不同站点 ...

  7. Warning: session_start() [function.session-start]: Cannot send session cookie解决办法

    在很多时间使用了session就会出来如下提示了, Warning: session_start() [function.session-start]: Cannot send session coo ...

  8. php中session_start()相关问题分析与解决办法

    介绍下,在php中使用session时遇到的一些问题,与相关解决方法.1.错误提示Warning: Cannot send session cookie - headers already sentW ...

  9. php 关于session_start()总是提示错误

    1.session_start();执行前不能有输出,或者漆面有ob_start();并php.ini配置output_buffering = On; 2.如果是utf8文件的话,要注意前面是否有bo ...

  10. PHP之session_start()详解

    1.session的工作原理 (1)首先使用session_start()函数进行初始换 (2)当执行PHP脚本时,通过使用$_SESSION超全局变量注册session变量. (3)当PHP脚本执行 ...

随机推荐

  1. bonecp使用数据源

    bonecp.properties jdbc.driverClass=oracle.jdbc.driver.OracleDriver jdbc.jdbcUrl=jdbc:oracle:thin:@19 ...

  2. BZOJ 3122 SDOI2013 随机数发生器 数论 EXBSGS

    标题效果:给定一列数X(i+1)=(a*Xi+b)%p 最低要求i>0.所以Xi=t 0.0 这个问题可以1A那很棒 首先讨论特殊情况 如果X1=t ans=1 如果a=0 ans=b==t? ...

  3. Matlab中调用第三方Java代码

    搞了一天,才算搞定. 第一步:定位Matlab中Java环境的ext目录 新建一个M script文件,或者直接在Matlab的交互式命令行中输入: disp(java.lang.System.get ...

  4. CSS3实现Tooltip提示框飞入飞出动画

    原文:CSS3实现Tooltip提示框飞入飞出动画 我们见过很多利用背景图片制作的Tooltip提示框,但是缺点是扩展比较麻烦,要经常改动图片.还有就是利用多层CSS的叠加实现,但是效果比较生硬,外观 ...

  5. Storing and Retrieving Images from SQL Server using Microsoft .NET

    原文 Storing and Retrieving Images from SQL Server using Microsoft .NET Download source - 19.6 Kb Intr ...

  6. EXCEL Pivot table manipulate

    Add filter For the Demo time,I would like to filter out the products which not in Red and Black colo ...

  7. 在CentOS 7上安装phpMyAdmin

    原文 在CentOS 7上安装phpMyAdmin phpMyAdmin是一款以PHP为基础,基于Web的MySQL/MariaDB数据库管理工具.虽然已经存在着一些诸如Adminer的轻量级数据库管 ...

  8. mongodb迁移

    A机器上有mongodb服务,A机器要废,于是迁至B. 简单起见,依旧是在A上ps auxwww|grep mongo找到正在执行的进程: /home/admin/mongodb/mongodb-li ...

  9. 【软件project】生存期模型(含图)

    为了反映软件生存周期内各个工作应怎样组织,各阶段怎样衔接,须要软件开发模型给出直观图示表达.软件开发模型是软件思想的详细化,是实施在过程模块中的软件开发方法和工具. 以下来介绍开发模型的特点以及他们的 ...

  10. DFS-leetcode Combination Sum I/I I

    深度优先搜索(DFS)它是一个搜索算法.第一次接触DFS它应该是一个二进制树的遍历内部,二叉树预订.序和后序实际上属于深度遍历-first.在本质上,深度优先搜索,遍历中则看到了更纯正的深度优先搜索算 ...