1、我用数据库成功存取sessiont,但服务品端的默认:/tem/下仍有session文件,只是内容为空?为什么?
  只要用了session_start, 就会有文件生成2、session的生命周期如何实现与cookie一致?
  两个作用和意义不同,为何要一致? cookie可以设一年的有效期,难道你要session也保持一年?

解决方案 »

  1.   

    session还有个最大的保存时间?是统一设的?有什么用? -------------------------  此时间用于判断用户是否仍然活动. 因为浏览器没关闭,但无动作的情况,服务端无法判断. 此时间段后,服务端即认为用户已断开. 具体可参考手册上关于session的章节.后面的没看懂
      

  2.   

    不知道楼主的想什么呢,为什么要seesion和cookie一致呢,如果只是为了判断是否是同一个用户访问,你不如自己做一个记录的id,服务端放在数据库,客户端放在cookie里,比那个seesionid效果好多,那个周期直到你删除数据库。害怕不安全,产生的id还可以自己做一个函数来进行编码。
      

  3.   

    多谢楼上两位给思路:
       可能是我问题没说明白:
        我的问题是这样的:
          如果不用session,单用cookie保存变量同样的可以实现认证,且可随意设生命周期!用cookie即可实现认证!
          现在我想同时使用cookie和session.
          session_star(),可产生一个cookie变量,且内容即是session_id().实际上这个sessionID(即session随机数)是可设存在周期的。如:etcookie(session_name(),session_id(),time()+$lifetime,"/");
          我的意思是,如何用这个cookie ID号,来实现认证。即通过这个ID来身份验证!cookie只有这个变量。如何实现?      服务器端如何根据这个cookie ID,来证明这是个曾经验证过的客户!
          
           这是否需要用cookie和session结合呢?如果要结合用?怎么结合!      实际上,如果不用cookie,单用session,同样可实现验证!只是下次重新打开浏览器要验证一次就行了!    现在问题是,我看一些文章说两者可结合用最好,但我不知怎样结合用!
     
       大家能否举例指点一下!
      

  4.   

    我的第1个问题已解决,原因可能是是在验证页面没有使用设置sessiond数据库存贮的文件!
    即在所有session_start()前require("session_inc.php");
    session_inc.php包含自定义的session打开,关闭,读,写等函数
      

  5.   

    我的意思是,如何用这个cookie ID号,来实现认证。即通过这个ID来身份验证!cookie只有这个变量。如何实现?      服务器端如何根据这个cookie ID,来证明这是个曾经验证过的客户!---------------------------------------------
      仅凭这个session id 判断? 如何避免重复? 如何避免伪造?
      

  6.   

    你既然想采用sessionid验证,那么完全可以在第一次访问的时候把验证过sessionid()放入数据库和客户端cookie,此sessionid最好再次编码,为了防止和session产生的重复,每次访问的时候从数据读出存储sessionid和现在产生的sessionid编码,接着判断客户端记录的sessionid和当前的sessionid编码是否一致,这样不就是验证过的了吗,你要确认是否验证,肯定要有验证的凭据吧!
      

  7.   

    有文章说可手动设置session生命周期:setcookie(session_name(),session_id(),time()+$lifetime,"/");是否这样设这个session文件即有设置的生命周期?
    我查了不少文章,都说session和cookie结合用最好,但到底怎样结合?我目前只知道各自用法! 有文章说session下cookie的ID是打开服务端的唯一钥匙。所以我也不知道在客户端是cookie只存ID变量好,还是同时存其他变量?按理是存一个ID变量就行了!hnxxwyq(独自流浪)说可将ID存数据库,每次和数据库ID对比,我的session就是存数据库的。session_start(_)后自动提取。应是不需要再单独对比。
        我的理解是不用再单独另存数据库了!
      

  8.   

    我知道session和cookie单独都可以实现身份验证!cookie生命周期可设,而session只有浏览器生命周期!但不文章都说两者结合用最好!但我不知道怎样结合才能实现身份验证!第一、如果设置了session下的cookier 生命周期,那session文件就有同样的周期,关闭游览器后,session文件及变量仍存在,但由于下次打开时发送的是别一个ID,所以会话已改变!这就是会话已改变,但session文件及变量仍存在!所以,如果仍使用COOKie里的ID,仍能 取得session变量。
         这样下次仍能仍能取得session变量验证!
         第二、但如果在退出时注消session变量,则无法在下次打开时进行验证。因为sessin文件(或记录)虽然仍存在,但内容已为空!所以无法验证!如果删除了session文件,也无法在下次进行直接验证,只能重新登录!
          这是否可理解为,要想下次直接验证,不用登录,就不能点退出并删除seeion文件和变量!
         第三、判 断cookie生命周期,如果仍在有效期内,即使按退出,也不除session文件及变量,就是说如果仍在cookie生命周期内,退出无用!
            或者是另一思路!一旦用户点退出,就删除seeion文件和变量,下次就必须重新登录!cookie就无用了!     上述思路是否正确!?大家再谈谈看法!
      

  9.   

    关于你的第一个问题,确实是这样的,session_start()开始之前首先要定位是否有上次的session_id,一般是通过get/post/cookies传递的,如果获取上次的session_id,将会自动将已经注册的变量自动转换为页面变量,这点我没有考虑到。如果没有就讲开始一个新的会话!关于第二个应该是这样的,已经没有session存在的验证过的变量,应该是和一个新的会话一样。第三,一般来说退出大多数不判断cookie的生命周期,这是因为这样的退出功能相当于鸡肋了,我认为退出以后cookie肯定是没有用,下次必须再次验证,要不这个就不叫退出了!