⑴ php中cookie和session的区别实例分析
Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID
为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一
SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也会失效。
服务器也可以通过URL重写的方式来传递SessionID的值,因此不是完全依赖Cookie。如果客户端Cookie禁用,则服务器可以自动通过重写URL的方式来保存Session的值,并且这个过程对程序员透明。
可以试一下,即使不写Cookie,在使用request.getCookies();取出的Cookie数组的长度也是1,而这个Cookie的名字就是JSESSIONID,还有一个很长的二进制的字符串,是SessionID的值。
大家都知道,http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,那么要怎么才能实现
网上商店中的购物车呢,session就是一种保存上下文信息的机制,它是针对每一个用户的,变量的值保存在服务器端,通过SessionID来区分不同
的客户,session是以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为JSESSIONID的输出
cookie,我们叫做session
cookie,以区别persistent cookies,也就是我们通常所说的cookie,注意session
cookie是存储于浏览器内存中的,并不是写到硬盘上的,这也就是我们刚才看到的JSESSIONID,我们通常情是看不到JSESSIONID的,但
是当我们把浏览器的cookie禁止后,web服务器会采用URL重写的方式传递Sessionid,我们就可以在地址栏看到
sessionid=KWJHUG6JJM65HS2K6之类的字符串。
明白了原理,我们就可以很容易的分辨出persistent cookies和session
cookie的区别了,网上那些关于两者安全性的讨论也就一目了然了,session
cookie针对某一次会话而言,会话结束session cookie也就随着消失了,而persistent
cookie只是存在于客户端硬盘上的一段文本(通常是加密的),而且可能会遭到cookie欺骗以及针对cookie的跨站脚本攻击,自然不如session
cookie安全了。
通常session
cookie是不能跨窗口使用的,当你新开了一个浏览器窗口进入相同页面时,系统会赋予你一个新的sessionid,这样我们信息共享的目的就达不到了,此时我们可以先把sessionid保存在persistent
cookie中,然后在新窗口中读出来,就可以得到上一个窗口SessionID了,这样通过session
cookie和persistent cookie的结合我们就实现了跨窗口的session tracking(会话跟踪)。
在一些web开发的书中,往往只是简单的把Session和cookie作为两种并列的http传送信息的方式,session
cookies位于服务器端,persistent
cookie位于客户端,可是session又是以cookie为基础的,明白的两者之间的联系和区别,我们就不难选择合适的技术来开发web
service了。
实例附上出处链接:http://www.jb51.net/article/54436.htm
⑵ php关闭浏览器如何使session失效
session 在服务器上的管理,通常以文件形式保存,文件名就是 session id。
浏览器关闭的过程中,服务器上的 session 数据并没有被销毁,因为这时候没有发送任何请求,服务器那边不会知道是否要销毁 session 的数据。浏览器再次启动重新打开页面的时候,发送的 session id 还是原来的 id,虽然你说没用到 cookie,但是这个 id 就是通过 cookie 发送的。
你可以看看 php.ini 的设置,主要看这两项:
session.gc_maxlifetime
session.cookie_lifetime
⑶ php session[]能否存数组
php的session可以存储数组。
问题可能是你的session没有被保存。
先看看用session保存简单的字符或数字能不能读取。
还有一种可能就是你保存和读取的键值不一致。
⑷ php Session:: 后面的::是什么意思
用于读取 Session类的静态变量或者静态函数。
比如
class Session{
static $name;
}
Session::name 能读去静态变量。
⑸ PHP中SESSION的注销与清除
1、每个页面都必须开启session_start()后才能在每个页面里面使用session。
2、session_start()初始化session,第一次访问会生成一个唯一会话ID保存在客户端(是基于cookie保存的),用户下次访问时,session_start()会检查有没有会话ID,如果有浏览器会带着这个会话ID过来(通过发送头文件传过来的,这个可以用ff浏览器看到)来确定客户端。
3、给于cookie的session会在客户端保存一个会话ID即session_id,这个可以通过打印cookie看到,这个session_id的键值为session_name,
session_id()
==
$_COOKIE[session_name()]
4、如果客户端禁用了cookie,则必须用url传递session_id即给予URL的SESSION
5、注销SESSION时不能用unset($_SESSION),可以使用$_SESSION
=
array()或则$_SESSION
=
null,正确注销session的方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//正确的注销session方法:
//1开启session
session_start();
//2、清空session信息
$_SESSION
=
array();
//3、清楚客户端sessionid
if(isset($_COOKIE[session_name()]))
{
setCookie(session_name(),'',time()-3600,'/');
}
//4、彻底销毁session
session_destroy();
相关栏目
电脑编程
php教程
asp教程
asp.net教程
jsp教程
javascript教程
编程语言综合
编程开发
ios开发
oracle教程
mysql教程
mssql教程
access教程
安卓软件开发
⑹ session的作用是什么
简单说来是识别用户并保持用户信息
不能使用session会话可能的原因可分几方面
如果是服务端不能用,例如PHP有的时候不能用,可能是Session的存储位置设置有问题或是没有开启session支持
如果是asp或.net不能用(IIS6) 有可能是应用程序池回收过于频繁
如果访问的用户有的能用,有的不能用那就是客户端浏览器禁用了Cookie
⑺ PHP 与 NodeJS 如何共用 Session
PHP 与 NodeJS共用 Session的方法是PHP暴露一个Service,向Node提供Session数据。php_session.php?SID=xxxx
1、php代码:
<?php
function getSessionByID($SID) {
if (session_id()) {
// 关闭当前session
session_destroy();
}
// 初始化指定session
session_id($SID);
session_start();
// 返回操作接口更友好的JSON
// 必要的FLAG看这里 http://www.php.net/manual/en/json.constants.php
return json_encode($_SESSION);
}
header('Content-Type:application/json');
echo getSessionByID($_GET['SID']);
?>
2、node实现代码:
var request = require('request');
request('http://localhost/php_session.php?SID=xxxx', function(err, res, body) {
if (!err && res.statusCode == 200) {
// 根据需要使用body(json)
}
});
⑻ php frameset首页中调用 session 验证登录无效
解决方法
环境:apache+php
程序代码如下:
复制代码代码如下:
<input name="username" type="text" class="input" id="username">
<input name="password" type="password" class="input" id="password">
<input name="ver" type="text" class="input1" id="ver" size="5">
<img src="../inc/ver.php" onclick="this.src='../inc/ver.php';" />
提交之后处理文件这post.php文件
复制代码代码如下:
if($_SESSION['ssioner']!=$ssever){
echo("<script>alert('验证码必须由4位数字组成!');history.back();</script>");exit;
}
结果发现一直提示验证码必须由4位数字组成,再打印输出session:
复制代码代码如下:
echo $_SESSION['ssioner'];
exit;
一直为空了,于时我想到了php环境配置的一个session文件目录,现在我们找到php.ini配置文件找到
upload_tmp_dir
发现这个目录是
upload_tmp_dir="D:\www.jb51.net\tp"
我检查一下我的D盘发现只有www.jb51.net文件而没有tp目录了,这样问题就找到了,于时我创建一个tp目录,重启apache发现在tp目录有sess_i40gl0p4hfep5r69j67o1k26d01文件了,这样再重新登录发现成功了。
希望本文所述对大家的PHP程序设计有所帮助。
⑼ php 禁用cookie 后 seesion 还能用吗
当然不能了
SESSION并不是COOKIE的子集ASP中:SESSION 必须倚赖COOKIE才可用,SESSION是存储在服务器端的,而COOKIE是存储在客户端的,相对而言,SESSION的安全性和可靠程度都比COOKIE高ASP.NET中SESSION可以不依赖COOKIE而存在!!! 也就是说,从微软的方面来说,开始让SESSION摆脱COOKIE的束缚了!! Session数据是存储在服务器上的,Cookie数据是存储在浏览器本机上的. 但如果浏览器不支持使用/接受Cookie,则不能使用Session. 这是因为,虽然Session真正的数据是存储在服务器上的,但每个Session都对应了一个由Web服务器指定的唯一识别符SeesionID,而在浏览器里是使用Cookie来存储这个SeesionID的.所以使用Session,浏览器必须支持Cookie. cookie是一个特殊的信息 只是服务器存于用户计算机上的一个文本文件 Session很大的实际意义的 当一个用户提交了表单时 浏览器会将用户的SessionID自动附加在HTTP头信息中 当服务器处理完这个表单后 将结果返回给SessionID所对应的用户 客户端的Session信息是存储于Cookie中的 如果客户端完全禁用掉了Cookie功能 他也就不能享受到了Session提供的功能了
⑽ php为什么获取不到session的值
1之前的代码逻辑是否已经给session赋值,使用var_mp($_SESSION)来查看
2请求中是否回传了PHPSESSID,如果没有,则可能导致获取session失败
3是否在操作时清除了浏览器的cookie?
http://blog.csdn.net/shi_yi_fei/article/details/9319399