//session1.php:
<?php
//session1.php
    session_start();
    echo "欢迎:第一页<br>";
    $_SESSION['myword']="我是张三";
    $_SESSION["myage"]="18";
    $_SESSION["mysex"]="男";
    echo "Cookie中myword值是:".$_SESSION['myword']."<br>";
    echo "<a href='session2.php'>下一页</a>";
?>//session2.php
<?php
//session2.php
    session_start();
    echo "欢迎:第二页<br>";
    echo "姓名:".$_SESSION['myword']."<br>";
    echo "年龄:".$_SESSION["myage"]."<br>";
    echo "性别:".$_SESSION["mysex"]."<br>";
    echo "<a href='session3.php'>下一页</a>";
?>
打开session1.php,输出
------------------------------------
欢迎:第一页
Cookie中myword值是:我是张三
下一页
------------------------------------点击“下一页”打开session2.php输出------------------------------------
欢迎:第二页Notice: Undefined index: myword in R:\Program Files\AppServ\www\session\session2.php on line 5
姓名:Notice: Undefined index: myage in R:\Program Files\AppServ\www\session\session2.php on line 6
年龄:Notice: Undefined index: mysex in R:\Program Files\AppServ\www\session\session2.php on line 7
性别:
下一页
------------------------------------
是不是配置的问题?  我的php.ini的session配置如下:session.save_handler = filessession.save_path = "R:/Program Files/AppServ/php5/session_tmp";     session.save_path = "N;MODE;/path"session.save_path = "R:/Program Files/AppServ/php5/session_tmp"(有三个session.save_path)session.cookie_domain = Cookies(其他的就不一一列出了)

解决方案 »

  1.   

    session.cookie_domain = 
    修改为这样或者注释掉,然后重启服务器
    我估计这种情况是没读取到cookie PHPSESSID导致的,你可以用print_r($_COOKIE) 来看看有没有PHPSESSID
      

  2.   

    R:/Program Files/AppServ/php5/session_tmp,这个目录是否存在?
      

  3.   

    R:/Program Files/AppServ/php5/session_tmp这个目录是我手动设置的
      

  4.   

    那这个目录下有SESSION文件存在吗?
      

  5.   

    This function returns TRUE if a session was successfully started, otherwise FALSE.看一下session_start的返回值呗。
      

  6.   

    有啊:比如
    sess_ap2pe9972nac3ppfp9cro1jo02
      

  7.   

    是不是每次都要将session_start放在代码最前面
      

  8.   

    请问dream1206这位好友,我按您的说法做了,调试成功,但我不明白session.cookie_domain = Cookies是干嘛的?
      

  9.   

    见#1楼,session.cookie_domain不要乱设置,该怎么设置自己搜.你本地测试绑定域名做什么。
      

  10.   

    也有可能是session文件夹没权限  遇到过
      

  11.   

    发个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(&apos;login&apos;) ││ $login != true) { 
    echo "你没有登陆"; 
    exit; 
    } 7.问:我用session_register()注册了session变量,可是当我用header或用javascript的重定向语句,那么在一下页面中,我却访问不到session所注册的变量值。请问如何解决? 
    问题的程序片段: 
    session_start(); 
    $ok = &apos;love you&apos;; 
    session_register(&apos;ok&apos;); 
    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(&apos;data&apos;); 
    $data=array(1,2,3,4); 方法是先注册后赋值 9.问题9:我是不是可以用像$HTTP_GET_VARS[&apos;**&apos;]方式来访问session值呢? 回答:可以,你可以使用如下global数组来访问session,以加强网页的安全性 
    $HTTP_SESSION_VARS 
    $_SESSION 
    例程: 
    session_start(); 
    $username = &apos;stangly.wrong&apos;; 
    session_register(&apos;username&apos;); echo $HTTP_SESSION_VARS[&apos;username&apos;]; 
    echo &apos;
    &apos;; 
    echo $_SESSION[&apos;username&apos;]; 
    ?> 
    请参照此例程修改符合您自己的程序。 问题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的配置今天调试程序遇到了session的设置问题,网上这篇文章比较好,共拿来学习,并供大家参考。
    转载自旅行论坛http://www/lvxing.net
    首先打开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 &apos;garbage collection&apos; process is started on every session initialization. 
    session.gc_probability = 1; After this number of seconds, stored data will be seen as &apos;garbage&apos; 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 &apos;garbage&apos; 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”一样的时间; 
    设置完毕后,打开编辑器,输入如下的代码: 
    ------------------------------------------------------------------------------------<?phpsession_start(); 
    session_register(&apos;count&apos;); 
    $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(&apos;count&apos;); // 注册Session变量Count 
    if(isset($PHPSESSID)) { 
    session_id($PHPSESSID); 
    } // 如果设置了$PHPSESSID,就将SessionID赋值为$PHPSESSID,否则生成SessionID 
    $PHPSESSID = session_id(); // 取得当前的SessionID 
    $count++; // 变量count加1 
    setcookie(&apos;PHPSESSID&apos;, $PHPSESSID, time()+3156000); // 储存SessionID到Cookie中 
    echo $count; // 显示Session变量count的值 
    ?> 
    ------------------------------------------------------------------------------------保存之后,利用和刚才拥有服务器权限时候的检测一样的方法,检测是否成功的保存了SessionID。 
    后记: 
    其实真正的永久储存是不可能的,因为Cookie的保存时间有限,而服务器的空间也有限…… 
    但是对于一些需要保存时间比较长的站点,以上方法就已经足够了!