已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
处理session跨域几种方案 1.访问共同的sessionId,把当前的sessionId写进cookie里面cookie在不同域名下是不能访问的,我们需要在访问在后台设置用户在登录的时候,把需要共用的登录信息的域名,如果是在1,2级域名下,直接把 cookie设置为所属主域名,例如:setcookie(session_id,session_id(),time()+3600*24*365*10,/,.); 也许你会问:如果是在不同的域名呢?采用P3P技术简单解决,实现原理,在访问网站的时候,程序触发文件的写入 sessionid值,sessionid值便可以获取,然后把seesion值存入数据库,取相同的sessionid值便可。这就要求里面的程序文件必需能跨域访问,默认情况下,浏览器是不能跨域设置cookie的,加上p3p头后才行。在对应php文件加上:header(P3P: CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR);2.session数据存储位置一致的实现方法session该数据默认情况下是存放在服务器的tmp文件下的,是以文件形式存在,而非存储在服务器的内存中,在这里我们得修改为所有域下都能访问的方式。网上介绍了数据库存储,文件形式存储,内存存储, 如果用数据库存储session数据,网站的访问量很大的话,SESSION 的读写会频繁地对数据库进行操作,效率就会明显降低,可以考虑存在内存服务器来实现,下面的session.rar里面介绍的是数据库存session的实例。常用跨域共用session的是登录模块,我相信很多开发的朋友的都遇到过,只需要一个地方登录,相关联的网站也是处于登录状态。两种情况:一种9和之间,另一种是 之间方式一: 在一,二级域名下调用如下代码: DBsession.phplifeTime = get_cfg_var(session.gc_maxlifetime); / open database-connection $db_handle = mysql_connect(self:db_host, self:db_user, self:db_pwd); $dbSel = mysql_select_db(self:db_name, $db_handle); / return success if(!$db_handle | !$dbSel) return false; $this-db_handle = $db_handle; return true; function close() $this-gc(ini_get(session.gc_maxlifetime); / close database-connection return mysql_close($this-db_handle); function read($sessID) / fetch session-data $res = mysql_query(SELECT session_data AS d FROM .self:db_table. WHERE session_id = $sessID AND session_expires .time(), $this-db_handle); / return data or an empty string at failure if($row = mysql_fetch_assoc($res) return $rowd; return ; function write($sessID, $sessData) / new session-expire-time $newExp = time() + $this-lifeTime; / is a session with this id in the database? $res = mysql_query(SELECT * FROM .self:db_table. WHERE session_id = $sessID, $this-db_handle); / if yes, if(mysql_num_rows($res) / .update session-data mysql_query(UPDATE .self:db_table. SET session_expires = $newExp, session_data = $sessData WHERE session_id = $sessID, $this-db_handle); / if something happened, return true if(mysql_affected_rows($this-db_handle) return true; else / if no session-data was found, / create a new row mysql_query(INSERT INTO .self:db_table. ( session_id, session_expires, session_data) VALUES( $sessID, $newExp, $sessData), $this-db_handle); / if row was created, return true if(mysql_affected_rows($this-db_handle) return true; / an unknown error occured return false; function destroy($sessID) / delete session-data mysql_query(DELETE FROM .self:db_table. WHERE session_id = $sessID, $this-db_handle); / if session was deleted, return true, if(mysql_affected_rows($this-db_handle) return true; / .else return false return false; function gc($sessMaxLifeTime) / delete old sessions mysql_query(DELETE FROM .self:db_table. WHERE session_expires db_handle); / return affected rows return mysql_affected_rows($this-db_handle); /* * 指定session有效的域名 * ini_set(session.cookie_domain, .); * .是站点的主域名,请注意前面个有一个. */ define(MAIN_DOMAIN, .); /设置主域名 /* * 不同子域名下共享session信息 * COOKIE_DOMAIN = false 禁止该功能 * COOKIE_DOMAIN = true 启用该功能 * 默认禁止 * 开启前提需要定义MAIN_DOMAIN常量 */ define(COOKIE_DOMAIN, true); if (defined(COOKIE_DOMAIN) & COOKIE_DOMAIN) if (defined(MAIN_DOMAIN) ini_set(session.cookie_domain, MAIN_DOMAIN); /* * 同一个主域名,不同服务器之间共享session信息 * USER_SESSION = false 禁用该功能 * USER_SESSION = true 启用该功能 * 默认禁止 * 开启前提需要建立mysql数据表 */ ini_set(, phpsessid);/设置色session id的名字 define(USER_SESSION, true); if (defined(USER_SESSION) & USER_SESSION) ini_set(session.save_handler, user); $session = new Session; session_module_name(user); session_set_save_handler( array(&$session, open), array(&$session, close), array(&$session, read), array(&$session, write), array(&$session, destroy), array(&$session, gc); /ini_set(session.save_path, dirname(_file_)./tmp); /session_id(demo); /ini_set(session.save_path,dirname(_file_)./tmp); session_start(); include(DBsession.php); $_SESSIONusssser_oke = xxssssss; $_SESSIONuser_oke = xxsss; ? 方式二: 方式三: 一级域名: session_start(); setcookie(session_id,session_id(),time()+3600*24*365*10,/,.); $_SESSIONuser_name = 梁山良民; 二级域名: session_id($_COOKIEsession_id); session_start(); $_SESSIONuser_sssme = 222222; 方式四:一级域名: ini_set(session.cookie_domain,.);/注:该参数必须在sesson_start()之上,否则将不会生效 session_start(); $_SESSIONuser_name = 梁山www良民; 二级域名: ini_set(session.cookie_domain,.);/注:该参数必须在sesson_start()之上,否则将不会生效 session_start(); $_SESSIONuser_nassse = 梁山www良民; 方式五:采用的p3p技术,实现原理,在访问网站的时候,程序触发文件的写入sessionid值,sessionid值便可以获取,然后把seesion值存入数据库,取相同的sessionid值便可。这就要求里面的程序文件必需能跨域访问,默认情况下,浏览器是不能跨域设置cookie的,加上p3p头后才行。在对应php文件加上:header(P3P: CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR); 网上博文: 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年智能穿戴设备应用开发可行性研究报告及总结分析
- 2025年校园生活服务平台开发项目可行性研究报告及总结分析
- 2025年可再生能源项目开发可行性研究报告及总结分析
- 2025年热能回收利用系统项目可行性研究报告及总结分析
- 2025年可持续发展目标与社会企业项目可行性研究报告及总结分析
- 2025年健康管理平台构建项目可行性研究报告及总结分析
- 2025年时尚品牌线上营销项目可行性研究报告及总结分析
- 2025年无人机监测系统在环保中的应用可行性研究报告及总结分析
- 2025年次世代网络教育平台开发可行性研究报告及总结分析
- 2025年机器人与人工智能结合应用项目可行性研究报告及总结分析
- 2025贵州贵安商业资产运营管理有限公司招聘11人考试笔试备考题库及答案解析
- 2025年陕西省行政执法证考试题库附答案
- 学堂在线医学英语词汇进阶(首医)作业单元测验答案
- 国家中医药管理局《中医药事业发展“十五五”规划》全文
- 基于网络流量分析的威胁检测研究
- 奇瑞入职在线测评题库
- 艾梅乙健康教育知识讲座
- 体质测试教案
- 15D501建筑物防雷设施安装图集
- 水库工程建设征地移民安置监测评估本底调查报告
- 多参数监护仪产品技术要求三瑞
评论
0/150
提交评论