session

TCP的keepalive&HTTP的keep-alive

我怕爱的太早我们不能终老 提交于 2020-03-02 03:52:20
最近工作中遇到一个问题,想把它记录下来,场景是这样的: 从上图可以看出,用户通过Client访问的是LVS的VIP, VIP后端挂载的RealServer是Nginx服务器。 Client可以是浏览器也可以是一个客户端程序。一般情况下,这种架构不会出现问题,但是如果Client端把请求发送给Nginx,Nginx的后端需要一段时间才能返回结果,超过1分30秒就会有问题,使用LVS作为负载均衡设备看到的现象就是1分30秒之后, Client和Nginx链接被断开,没有数据返回。原因是LVS默认保持TCP的Session为90s,超过90s没有TCP报文在链接上传输,LVS就会给两端发送RESET报文断开链接。LVS这么做的原因相信大家都知道一二,我所知道的原因主要有两点: 1.节省负载均衡设备资源,每一个TCP/UDP的链接都会在负载均衡设备上创建一个Session的结构, 链接如果一直不断开,这种Session结构信息最终会消耗掉所有的资源,所以必须释放掉。 2.另外释放掉能保护后端的资源,如果攻击者通过空链接,链接到Nginx上,如果Nginx没有做合适 的保护,Nginx会因为链接数过多而无法提供服务。 这种问题不只是在LVS上有,之前在商用负载均衡设备F5上遇到过同样的问题,F5的Session断开方式和LVS有点区别,F5不会主动发送RESET给链接的两端

处理session跨域几种的方案

为君一笑 提交于 2020-03-02 01:46:53
常用跨域共用session的是登录模块,我相信很多开发的朋友的都遇到过,只需要一个地方登录,相关联的网站也是处于登录状态。两种情况:一种9streets.cn和a.9streets.cn之间,另一种是a.com b.com之间,这几天总结了一下处理方法。 方式一 : 在一,二级域名下调用如下代码: <?php include("DBsession.php"); $_SESSION['usssser_oke'] = 'xxssssss'; $_SESSION['user_oke'] = 'xxsss'; ?> DBsession.php <?php /** /** 直接引用api QQ登录的session写法,配置相关配置才行哈 * 设置session配置 */ /** * CREATE TABLE `tbl_session` ( * `session_id` varchar(255) binary NOT NULL default '', * `session_expires` int(10) unsigned NOT NULL default '0', * `session_data` text, * PRIMARY KEY (`session_id`) * ) ENGINE=MyISAM; */ class Session { //mysql的主机地址 const db

PHP中利用COOKIE与SESSION联合实现SESSION跨域

假装没事ソ 提交于 2020-03-01 23:57:15
大家都知道 SESSION# 是不可以 跨域# 的,也就是说: a.demo.com这个域的可执行文件不可以访问到b.demo.com的SESSION,这个是SESSION的特性,同样也是出于安全角度才这样的. 在一般情况下,一个网站只有一个域名,www.demo.com,但是也有些网站架构是由多个子域名组建的.所以就需要SESSION可以跨子域被 访问到,这样才可以实现用户的跨域登录.就是说客户在A下登录的,同样B也同时登录了,不需要用户再次登录,同时也实现了参数的跨域传递.当然不可跨域的 SESSION本身已经可以帮助我们做很多事情了,那么跨域后的SESSION呢.读到这里是否很激动人心,当然你也可能是正在为SESSION跨域而发 愁而找到这篇文章的,同样也祝贺你.我们长话断说了,开始Ioopen的话题: COOKIE# 与SESSION联用实现SESSION跨域. 首先描述下我的思路,COOKIE可以指定域名,也就是说它可以跨域子域,例如: setcookie(’name’,’Ioopen’,time()+3600*24,’/’,’demo.com’) ,那么a.demo.com,b.demo.com都可以访问到$_COOKIE['name'],值也均为’Ioopen’.同 理,SESSION ID也可以设置成这个域名,那么a.demo.com和b.demo

第24章 在线会话管理

泪湿孤枕 提交于 2020-03-01 23:55:09
有时候需要显示当前在线人数、当前在线用户,有时候可能需要强制某个用户下线等,此时就需要获取相应的在线用户并进行一些操作,本章基于《第十六章 综合实例》代码构建。 会话控制器 @RequiresPermissions("session:*") @Controller @RequestMapping("/sessions") public class SessionController { @Autowired private SessionDAO sessionDAO; @RequestMapping() public String list(Model model) { Collection<Session> sessions = sessionDAO.getActiveSessions(); model.addAttribute("sessions", sessions); model.addAttribute("sesessionCount", sessions.size()); return "sessions/list"; } @RequestMapping("/{sessionId}/forceLogout") public String forceLogout(@PathVariable("sessionId") String sessionId,

PHP session 跨子域问题总结

梦想与她 提交于 2020-03-01 23:07:20
Session主要分两部分: 一个是Session数据,该数据默认情况下是存放在服务器的tmp文件下的,是以文件形式存在 另一个是标志着Session数据的Session Id,Session ID,就是那个 Session 文件的文件名,Session ID 是随机生成的,因此能保证唯一性和随机性,确保 Session 的安全。一般如果没有设置 Session 的生存周期,则 Session ID 存储在内存中,关闭浏览器后该 ID 自动注销,重新请求该页面后,重新注册一个 session ID。如果客户端没有禁用 Cookie,则 Cookie 在启动 Session 会话的时候扮演的是存储 Session ID 和 Session 生存期的角色。 两个不同的域名网站,想用同一个Session,就是牵扯到Session跨域问题! 默认情况下,各个服务器会各自分别对同一个客户端产生 SESSIONID,如对于同一个用户浏览器,A 服务器产生的 SESSION ID 是 11111111111,而B 服务器生成的则是222222。另外,PHP 的 SESSION数据都是分别保存在本服务器的文件系统中。想要共享 SESSION 数据,那就必须实现两个目标: 一个是各个服务器对同一个客户端产生的SESSION ID 必须相同,并且可通过同一个 COOKIE 进行传递

PHP 环境安装

若如初见. 提交于 2020-03-01 22:27:39
PHP一键安装包介绍 一:wnmp WNMP是Windows下的绿色Nginx+Mysql+PHP环境集成套件包是目前最流行的php一键安装包,下载官网网址:https://www.getwnmp.org/downloads/,最新版本: Wnmp-2.2.1.exe ,傻瓜式安装,根目录为html,配置环境简单 注意,修改mysql的同学们,wnmp的mysql原密码为:password 二:DedeAMPZ-PHP环境整合套件 DedeAMPZ 是直接整合PHP + Apache + MySql 的服务器环境管理软件,操作十分傻瓜化,适合初中级水平的站长使用。该套装默认搭载dedecms。安装使用十分简单,并支持在php4与php5中切 换。同样也可以调试其他PHP程序,只要放在wwwroot目录中即可。 三: Xampp XAMPP是一款比较强大的本地测试平台,注册为系统服务有个好处就是开机能够自动运行,但是会消耗一定的系统资源,怎么取舍用户自己来定。安装成功,服 务也启动成功后,就可以把浏览器打开输入http://localhost/,试试是否成功。在XAMPP的网页选项里,有中文支持,好像好多人都在用 Xampp。 四:WampServer 整合PHP + Apache + MySql,傻瓜式安装,官方网站没有中文,但是程序支持中文。它能切换在线和离线状态

同一个网站,多个域名指向,session共享(一次登录即可)

痞子三分冷 提交于 2020-03-01 21:23:24
网站的多个域名指向同一个网站目录(注意:不适合服务器集群系统)。关于服务器集群系统怎么做的,我还不知道,有知道的请联系我,QQ:602148751 只需要在访问的入口文件定义 ini_set('session.cookie_domain', ".domain.com"); //跨域访问Session 。以下是50玩家多个域名的设置。 header("Content-type: text/html; charset=utf-8"); ini_set('session.cookie_domain', ".50wj.com");//跨域访问Session // 检测PHP环境 if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !'); // 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false define('APP_DEBUG',false); define('APP_NAME', 'MyHome'); define('APP_PATH','./Application/'); define('BUILD_DIR_SECURE', false);// true 为自动生成目录安全文件 define('WEB_ROOT_PATH', rtrim(dirname(__FILE__), '/\\

spring-mybatis与mybatis区别

允我心安 提交于 2020-03-01 20:22:14
1,spring-mybatis一级缓存失效,因为是sqlsesstionTemplate,其使用了一个代理proxysession,每次请求都会关闭session; spring-mybatis扩展了一个类sqlsessiontemplate,这个类在spring容器启动时被注入给mapper, 这个类替代了原来的mybatis的DefaultSqlSession,sqlsessiontemplate的所有查询并不直接查询,而是经过一个代理对象,代理对象增加了查询方法,主要是每次关闭了session public SqlSessionTemplate(SqlSessionFactory sqlSessionFactory, ExecutorType executorType, PersistenceExceptionTranslator exceptionTranslator) { Assert.notNull(sqlSessionFactory, "Property 'sqlSessionFactory' is required"); Assert.notNull(executorType, "Property 'executorType' is required"); this.sqlSessionFactory = sqlSessionFactory; this

Session共享解决方案

。_饼干妹妹 提交于 2020-03-01 19:28:09
使用nginx做的负载均衡添加一个ip_hash配置   步骤一:创建一个工程,启动两个Tomcat        步骤二:编写一个servlet测试   @WebServlet("/nginxSessionServlet") public class NginxSessionServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req,resp); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("当前使用端口:"+req.getLocalPort()); String action = req.getParameter("action"); if (action.equals("setSession")){ req.getSession().setAttribute("username",

Flask框架(五)之SQLAlchemy

对着背影说爱祢 提交于 2020-03-01 19:02:30
SQLAlchemy 一、介绍 SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 pip3 install sqlalchemy 组成部分: Engine,框架的引擎 Connection Pooling ,数据库连接池 Dialect,选择连接数据库的DB API种类 Schema/Types,架构和类型 SQL Exprression Language,SQL表达式语言 SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如: MySQL-Python mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname> pymysql mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>] MySQL-Connector mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname> cx_Oracle