跨域&session

  • 说来惭愧,工作三年听过session 听过跨域也知道解决的办法但是却没有去深入思考一下这两个东西
    -今天发生一件事情 登录A项目后打开链接去B项目中做操作这种情况下同事提到了使用二级目录解决跨域的问题。当时的我想不到这与跨域有什么联系特别说明一点项目中是用的session存储用户信息

  • 什么是跨域

  • 比方说你有一个网站我也有一个网站连个网站的信息是不能共用是不,共用了这样岂不是泄露了自己的秘密

  • 所以我们的浏览器中只有域名,协议,端口都相同才能互相访问 他们的信息是可以共享的

  • 为什么要解决跨域

  • 微服务时代,对于开发人员来讲前端的项目分为了多个但是对于用户的来说这就是一个大项目,登录后每个项目都可以访问得到。

  • 所以这种情况下我们是需要共享我们的用户信息,以及其他的信息

  • 在我们现在的项目后期跨域为什么不经常提到

  • 因为我们现在的前端项目部署大都部署在了nginx上,当前端项目去访问我们的后台项目时,nginx给我们做了一层转发满足浏览器的同源策略实现跨域

  • session的作用域

  • 会话也就是浏览器未关闭时session是一直存在着的但不是有效因为你的session也有可能会设置过期时间

  • session的保存在哪里

  • 保存在我们服务器的内存中通过key-value的方式存储

  • 服务器怎么去获取对应浏览器对应用户的session信息

  • 不知道大家有没有发现一般我们请求的时候会在cookie中寸一个jsessionId
    这个jsession就是一个标识代表着当前这个浏览器刚刚登录的用户,通过这个标识就可以从服务器内存中获取到session。
    下面又引发出一个问题token与session的区别是什么可以看下面的文章

class Session { //mysql的主机地址 const db_host = "localhost"; //需要第三方指定ip地址 //数据库用户名 const db_user = "root"; //需要第三方指定自己的用户名 //数据库密码 const db_pwd = ""; //需要第三方指定自己的库据库密码 //数据库 const db_name = "thinkphp"; //需要第三方指定数据库 //数据库表 const db_table = "tbl_session"; //需要第三方指定数据表 //mysql-handle private $db_handle; //session-lifetime private $lifeTime; function open($savePath, $sessName) { // get session-lifetime $this--->lifeTime = 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 $row['d']; 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; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值