做电脑网站宽度,wordpress .po文件,平凉市城乡建设局网站,网站实名认证功能怎么做cookie和session有什么用 常见的用法#xff0c;比如在有些网站下载东西需要会员先登陆。http协议本身是无状态的#xff0c;无法得知顾客是否已经登陆#xff0c;怎么办呢#xff1f;cookie和session就可以知道。再比如网上购物#xff0c;用户身份认证#xff0c;程序… cookie和session有什么用 常见的用法比如在有些网站下载东西需要会员先登陆。http协议本身是无状态的无法得知顾客是否已经登陆怎么办呢cookie和session就可以知道。再比如网上购物用户身份认证程序状态记录。购物车怎么知道顾客挑选过哪些商品呢cookie和session也可以记录。总而言之cookie和session就是能够记录顾客状态的技术尽管二者属于不同的技术但只要cookie能做到的session也能做到如果session和cookie一样安全的话二者就没有并要同时存在了只要cookie就好了让客户端来分提服务器的负担并且对于用户来说又是透明的。何乐而不为呢。 1. 什么是session Session的中文译名叫做“会话”其本来的含义是指有始有终的一系列动作/消息比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。 session和cookie的交互 在PHP服务端启用session_statrt后浏览器运行该脚本时会自动产生名为‘PHPSESSID’的一个cookie这个cookie的值和存放在服务端的session文件名字一致,当浏览器向服务端发起请求时便会将cookie值传递给服务端服务端识别这个cookie后,便可将客户端信息保存到session中 因此通过SESSION(cookie是另外一种解决办法)记录用户的有关信息以供用户再次以此身份对web服务器提起请求时作确认。会话的发明使得一个用户在多个页面间切换时能够保存他的信息。网站编程人员都有这样的体会每一页中的变量是不能在第三页中使用的(虽然formurl也可以实现但这都是非常不理想的办法)而SESSION中注册的变量就可以作为全局变量使用了。SESSION的实现中采用COOKIE技术SESSION会在客户端保存一个包含session_id(SESSION编号)的COOKIE在服务器端保存其他session变量比如session_name()等等。当用户请求服务器时也把session_id一起发送到服务器通过session_id提取所保存在服务器端的变量就能识别用户是谁了。同时也不难理解为什么SESSION有时会失效了。当客户端禁用COOKIE时(点击IE中的“工具”—“Internet选项”在弹出的对话框里点击“安全”—“自定义级别”项将“允许每个对话COOKIE”设为禁用)session_id将无法传递此时SESSION失效。不过PHP5在linux/unix平台可以自动检查cookie状态如果客户端设置了禁用则系统自动把session_id附加到url上传递。windows主机则无此功能。 a域名的网站我登陆成功.怎样到b域名的网站也能获得session? 在 www.a.com 上登陆后去 www.b.com 的连接中带有 形如 http://www.b.com/xxxx.php?syyyyyyyyyy 的 其中 yyyyyyyyyy 是在 www.a.com 中 session_id(); 的值, 如果a,b在同一个服务器直接读取文件。不在的话b可以调用a的接口a需要接口实现 根据session文件获取session信息 $sessionPath session_save_path();
$sessionFile $sessionPath . DS . sess_ . $sid;//sid是sessionid
if (file_exists($sessionFile) (time() - filectime($sessionFile)) $liftTime) {$lock new CacheLock($sid);$lock-lock();$content file_get_contents($sessionFile);$tempSession $_SESSION;$_SESSION array();session_decode($content); //成功回写$_SESSION$result[info][customer_id] $_SESSION[customer_gm][id];$result[info][customer_name] $_SESSION[customer_gm][name];$result[info][customer_email] $_SESSION[customer_gm][email];$result[msg] ;$result[success] 1;$_SESSION $tempSession;$lock-unlock();
} 2. Session常见函数及用法 PHP5使用$_SESSION[‘xxx’]xxx注册SESSION全局变量。Page1.php ?php
session_start(); //使用SESSION前必须调用该函数。
$_SESSION[passwd] mynameislikui;
$_SESSION[time] time();
echo br/a hrefpage2.php通过COOKIE传递SESSION/a; //如果客户端支持cookie可通过该链接传递session到下一页。Page2.php ?php
session_start();
echo $_SESSION[name]; //
echo $_SESSION[passwd]; //
echo date(Y m d H:i:s, $_SESSION[time]);
echo br /a hrefpage1.php返回山一页/a;
? 有两种方法传递一个会话 ID cookie cookie 更优化但由于不总是可用URL参数 直接将会话 ID 嵌入到 URL 中间去。 ● session_id session_id() 用于设定或取得当前session_id。php5中既可以使用session_id()也可以通过附加在url上的SID取得当前会话的session_id和session_name。如果session_id()有具体指定值的话将取代当前的session_id值。使用该函数前必须启动会话session_start();当我们使用session cookies时如果指定了一个session_id()值每次启动session_start()都会往客户端发送一个cookie值。不论当前session_id是否与指定值相等。session_id()如果没有指定值则返回当前session_id();当前会话没有启动的话则返回空字符串。 ● 更改 session_id session_regenerate_id() 更改成功则返回true失败则返回false。使用该函数可以为当前session更改session_id但不改变当前session的其他信息。例如 ?php
session_start();
$old_sessionid session_id();
session_regenerate_id();
$new_sessionid session_id();
echo 原始 SessionID: $old_sessionidbr/;
echo 新的 SessionID: $new_sessionidbr/;
echopre;
print_r($_SESSION);
echo/pre;
?● session_name() 返回当前session的name或改变当前session的name。如果要改变当前session的name必须在session_start()之前调用该函数。注意session_name不能只由数字组成它至少包含一个字母。否则会在每时每刻都生成一个新的session id. ?php
$previous_name session_name(WebsiteID);
echo 新的session名为 $previous_namebr/;a href1.php??php echo session_name() . .session_id(); ?.../a● 如何删除session 下面是PHP官方关于 删除session的案例 ?php
// 初始化session.
session_start();
/*** 删除所有的session变量..也可用unset($_SESSION[xxx])逐个删除。****/
$_SESSION array();
/***删除sessin id.由于session默认是基于cookie的所以使用setcookie删除包含session id的cookie.***/
if (isset($_COOKIE[session_name()])) {setcookie(session_name(), , time() - 42000, /);
}
// 最后彻底销毁session.
session_destroy();
?由此我们可以得出删除Session的步骤 ①session_start()②$_SESSIONarray()/unset($_SESSION[xxx])③session_destroy() ● SESSION安全: 会话模块不能保证存放在会话中的信息只能被创建该会话的用户看到。根据其存放的数据还需要采取更多措施来主动保护会话的完整性。 评估会话中携带的数据并实施附加保护措施通常要付出代价降低用户的方便程度。例如如果要保护用户免于受简单的社交策略侵害注指在 URL 中显示的会话 ID 会被别人在电脑屏幕上看到或被别的网站通过 HTTP Referer 得到等则应该启用 session.use_only_cookies。此情形下客户端必须无条件启用 cookie否则会话就不工作。 有几种途径会将现有的会话 ID 泄露给第三方。泄露出的会话 ID 使第三方能够访问所有与指定 ID 相关联的资源。第一URL 携带会话 ID。如果连接到外部站点包含有会话 ID 的 URL 可能会被存在外部站点的 Referer 日志中。第二较主动的攻击者可能会侦听网段的数据包。如果未加密会话 ID 会以明文方式在网络中流过。对此的解决方式是在服务器上实施 SSL 并强制用户使用。 默认情况下所有与特定会话相关的数据都被存储在由 INI 选项 session.save_path 指定的目录下的一个文件中session文件的命名格式是sess_[PHPSESSID的值]。每一个文件里面保存了一个会话的session_encode数据。对每个会话会建立一个文件不论是否有数据与该会话相关。这是由于每打开一个会话即建立一个文件不论是否有数据写入到该文件中。注意由于和文件系统协同工作的限制此行为有个副作用有可能造成用户定制的会话处理器例如用数据库丢失了未存储数据的会话。 上面介绍函数下文将会用到但还有一些有关session的函数也介绍一下session_encode 函数功能sesssion信息编码 函数原型string session_encode(void); 返回值字符串 功能说明返回的字符串中包含全局变量中各变量的名称与值形式如a|s:12:it is a test \;c|s:4:lala; a是变量名 s:12代表变量a的值it is a test的长度是12 变量间用分号”;”分隔。session_decode 函数功能sesssion信息解码 函数原型boolean session_decode (string data) 返回值布尔值 功能说明这个函数可将session信息解码成功则返回逻辑值true PHP5不再使用session_id而是把它变成一个常量SID并保存在cookie中。如果客户端禁用了cookiephp会自动通过url自动传动传递SID其条件是设置php.ini中的session.use_trans_sid 1。此时即使客户端即使禁用了cookie也没关系了。 用 strip_tags() 来输出 SID 以避免 XSS 相关的攻击。 session跨页传递需要考虑三种情况 ①客户端禁用了cookie。②浏览器出现问题暂时无法存取cookie③php.ini中的session.use_trans_sid 0或者编译时没有打开--enable-trans-sid选项 为什么会这样呢下面解释一下原因 Session文件分为两部分session变量保存在服务器端默认以文件方式存储session而session id则以cookie形式保存在客户端。(注意session默认是基于cookie的)。 当用户的浏览器向服务器提出请求时同时发送包含session id的cookie(默认情况下)。服务器根据客户端提供的session id来得到用户的文件即保存在服务器端的session变量值。事实上session id可以使用客户端的Cookie或者Http1.1协议的Query_String就是访问的URL的“?”后面的部分来传送给服务器然后服务器读取Session的目录。PHP中的session在默认情况下是使用客户端的Cookie来保存session id的,所以当客户端的cookie出现问题的时候就会影响session了。必须注意的是session不一定必须依赖cookie这也是session相比cookie的高明之处。 当客户端的Cookie被禁用或出现问题时PHP会自动把session id附着在URL中,这样再通过session id就能跨页使用session变量了。但这种附着也是有一定条件的 其一“php.ini中的session.use_trans_sid 1或者编译时打开打开了--enable-trans-sid选项” 其二运行PHP的服务器必须是unix/linux系统windows不具备此项功能。 明白了以上的道理我们就可以得出解决session跨页传递问题的三条途径 1、设置php.ini中的session.use_trans_sid 1或者编译时打开打开了--enable-trans-sid选项让PHP自动跨页传递session id。 2、手动通过URL传值、隐藏表单传递session id。 3、用文件、数据库等形式保存session_id,在跨页过程中手动调用。 ?php
session_start();
$_SESSION[var1]中华人民共和国;
$sn session_id();
$urla hrefs2.php?s.$sn.下一页/a;//客户端不支持cookie时使用该办法传递session.
echo $url;
? s2.php ?php
session_id($_GET[s]);
session_start();
echo 传递的session变量var1的值为.$_SESSION[var1];
? 二什么cookie cookie分为二种 1以文件方式存在硬盘空间上的长期性的cookie2停留在浏览器所占内存中的临时性的cookie 浏览网站时你会经常发现网站登录的地方会有提示问你是不是要记住自己的登录状态像这种情况登录时填写的一些信息会被以文件的方式存放在客户端的硬盘上。 当用户登录后session会在cookie端产生一个session_id这个session_id是存于浏览器所占用的内存当中。当你关闭浏览器后session_id也要消失了。 cookie采用的是在客户端保持状态的方案它是客户端的会话状态的一种储存机制。它 是服务器在本地机器上存储的小段文本或者是内存中的一段数据并随每一个请求发送至同一个服务器。IETF RFC 2965 HTTP State Management Mechanism 是通用cookie规范。网络服务器用HTTP头信息向客户端发送cookies在客户终端浏览器解析这些cookies并将它们保存为一个本地文 件或者本地内存中数据它会自动将同一服务器的任何请求缚上这些cookies由于采用服务器端保持状态的方案在客户端也需要保存一个标识所以 session机制借助于cookie机制来达到保存标识的目的这样就可以解决HTTP协议无状态的缺陷。 ?php
if ($_GET[out])
{ //注销cookie方法setcookie(name, );setcookie(pwd, );echo scriptlocation.hrefcookie.php/script;
}if ($_POST[uname] $_POST[upwd]) { //cookie的配置setcookie(name, $_POST[uname], time() 3600);setcookie(pwd, $_POST[upwd], time() 3600);
//让它跳转一次进行刷新echo scriptlocation.hrefcookie.php/script;
}if ($_COOKIE[name] $_COOKIE[pwd]) { //cookie的应用echo 用户: . $_COOKIE[name] . br密码: . $_COOKIE[pwd];
//写个超级链接注销cookieecho brbra hrefcookie.php?outout注销cookie/a;
} // else echo cookie保存失败;
else echo 请登录;
?form action methodpost用户input typetext nameuname valuebrbr密码input typetext nameupwdbrbrinput typesubmit namesub value登录
/form 二级域名共享cookies 比如这样的情况我们在一级域名是个网站如www.xhbin.com,他的下面有个二级域名如bbs.xhbin.com 我们要想实现在一级域名上登录后保留这个cookie到二级域名上也就是说实现同步登录的效果 我们可以这样设置cookie setcookie(“fangbinbin”,”mengfei”,time()3600,”/”,”.xhbin.com”); 那么我们就可以在这www.xhbin.com 和bbs.xhbin.com下面直接使用echo $_COOKIE[fangbinbin]; 就能够输出那个设置的cookie的值了 这样子就解决了那个同步登录的问题当然如果涉及到3个及其以上的域名最好都有统一的登录界面和退出界面如登录时统一POST到一级域名的登录页面。 再将这个Cookie的所涉及到的用户登录Session信息保存到Key-Value类型的缓存中如memcached、 memcachedDB 等尽量避免写文件或者DB降低IO提供用户体验。session存cookie session 的生命周期是有一次但是不同的页面要用同一个session变量的话就需要在不同的页面加上session_start()不然你是在另一个页面用 不了session的所以为了方便就用session_set_cookie_params把session变量存在cookie中就可以正常使用 session了 这样就不用在每个页面都要调用session_start() session_save_path($path);
session_set_cookie_params(0, /, .trip166.com);
session_start(); 然后在firefox下web Developer 中的查看cookie看你的session 的id的作用域如果为.trip166.com则说明cookie有效session_id 全域有效不出意外,你能取得session。 cookie安全 cookiekey和浏览器挂钩 $auth_key md5($salt.$_SERVER[HTTP_USER_AGENT]); 然后加密解密$auth_key判断当前的和cookie中的$auth_key PHP - 利用P3P实现跨域 ?php
header(P3P: CPCURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR);
setcookie(test, 124, time()3600, /, .a.com);
?