Heim  >  Artikel  >  Backend-Entwicklung  >  好像cookie有过期时间,session没有过期时间?

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

WBOY
WBOYOriginal
2016-06-23 13:16:121085Durchsuche

<?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都会过期的

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn