Maison  >  Article  >  développement back-end  >  好像cookie有过期时间,session没有过期时间?

好像cookie有过期时间,session没有过期时间?

WBOY
WBOYoriginal
2016-06-23 13:16:121088parcourir

<?php//省略几百字。 if (!mysql_fetch_row($query))	//如果密码错误。      {echo '<br><center>用户名或密码错误。</center><br><br>';    include $_SERVER[DOCUMENT_ROOT] . '/template/footer.php';exit();      }else{          echo "<center>$login_email ".',欢迎来到' . WEBSITE_NAME . '。</center>';//写入session。$_SESSION["save_username"]="$login_email";}    //设置setcookie.    setcookie("setcookie","$login_email",time()+60);//设置一个小时过期。?>


 
<?php 				if($_SESSION['save_username']) //判断用户是否登录。					{			?>				<!--用户登录后的导航条-->				<?php					echo $_COOKIE["setcookie"];					//print_r($_COOKIE);					//print_r($_SESSION);				?>				欢迎<?php					echo  $_SESSION['save_username']; /*通过SESSION显示已登录用户。*/ 				?> ,你已登录。 				<a href="/login_out/">退出登录</a>			<?php 				}else if($_SESSION['save_admin_name']) //判断是否管理员登录。        {          ?>        <!--管理员登录后的导航条-->        欢迎管理员<?php echo  $_SESSION['save_admin_name']; /*通过SESSION显示已登录用户。*/ ?> , <a href="/login_out/">退出登录</a>      <?php         }         else        {				?>				欢迎来自<?php include $_SERVER[DOCUMENT_ROOT] . '/include/ip.php';?>的朋友,请<a href=/reg/reg.php>注册</a> 或 <a href=/login/email_login/>登录</a> 				<?php					}				?>


顺便问问我这个退出好像有点别扭。
  unset($_SESSION);  session_destroy();     if(!$_SESSION)    {        echo "退出登录成功。<br>        2秒之后返回首页。";        //header("refrech:2;URL=http://www.09-29.com/");        header("refresh:1;url=/");    }


回复讨论(解决方案)

session是基于cookie实现的,不可能不过期
header函数之前不能有输出

测试几次,
注释unset($_SESSION);用session_destroy();结果没看到什么不同啊?

session_destroy();听说是注销整站session。

我用a、b浏览器同时登录,在a浏览器注销,浏览器没有退出?

cookie里有个phpsessid , 每个ssid对应一个session文件。不同浏览器登录,你的ssid有做过同步吗?  很明显你的ssid肯定是不同的,那么其实你两个浏览器对应的是两个session,你注销了a,跟b有什么关系

测试几次,
注释unset($_SESSION);用session_destroy();结果没看到什么不同啊?

session_destroy();听说是注销整站session。

我用a、b浏览器同时登录,在a浏览器注销,浏览器没有退出?


cookie是配合session来使用的,每个浏览器的cookie是独立的,不是说a浏览器退出了,b浏览器就一定会退出。

cookies与session都有过期时间。
session是依赖cookie的。

session.auto_start 开启就自动完成了session_start()

区别就在于在用SESSION前是否需要session_start();



session.auto_start = on
时,执行 session_start() 将产生新的 session_id

session.auto_start = on 的优点在于,任何时候都不会因忘记执行 session_start() 或 session_start() 在程序里的位置不对,而导致错误
缺点在于,如果你使用的是第三方代码,则必须删去其中的全部 session_start() 。否则将不能得到正确的结果

上面回复忽略……

默认情况下session是基于cookie来存储的,注销掉session的同时,也要注销掉cookie。

sessionid 通过 cookie 传递
可通过 session.cookie_lifetime 设置过期时间(默认是0)
但须注意与 session.gc_maxlifetime 的配合

另外
setcookie("setcookie","$login_email",time()+60);//设置 一个小时过期
这个注释是错误的!应为 一分钟

session和cookie都会过期的

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn