在大型网站中需要保存用户的会话,通常有这么几种方式:
1.把session放在应用服务器
这也是tomcat默认方式,sessionId保存在cookie,sessionStore作为文件保存在tomcat的目录。这种方式有很大的局限性就是应用是有状态的。
2.把session放在cookie
把sessionStore加密之后放在cookie,每次请求的时候从浏览器提交过来,这种方式能解决应用无状态,但也存在2个小问题。
1. cookie安全问题,只要任何人拦截到cookie就相当于获取了用户的密码。 (可以通过增加时间戳或者把用户IP地址也记录下来提高安全性)
2. 用户每次访问页面都带上cookie,带宽浪费。
3.把session放在db
这也是django默认的做法,用户每次登录的时候会产生一个sessionid,通过sessionid从数据库查询出session,如果找不到就insert一条新的,可以想象这个数据量是非常巨大,可以采用reids替换。
今天需要解决java 和python 登录互通的问题,python默认是通过cPickle序列化的,java并不能反序列化cPickle产生的数据,
一种思路就是python 通过json格式来序列化,这样java就能认识了,但发布的时候却失败了,原因第三方登录会往是session里存放一些对象,比如:
这种对象json会失败的。怎么解决呢?
方案1: 通过YAML
方案2: 通过google protocol buffer
方案3: 只把userid序列化
1.把session放在应用服务器
这也是tomcat默认方式,sessionId保存在cookie,sessionStore作为文件保存在tomcat的目录。这种方式有很大的局限性就是应用是有状态的。
2.把session放在cookie
把sessionStore加密之后放在cookie,每次请求的时候从浏览器提交过来,这种方式能解决应用无状态,但也存在2个小问题。
1. cookie安全问题,只要任何人拦截到cookie就相当于获取了用户的密码。 (可以通过增加时间戳或者把用户IP地址也记录下来提高安全性)
2. 用户每次访问页面都带上cookie,带宽浪费。
3.把session放在db
这也是django默认的做法,用户每次登录的时候会产生一个sessionid,通过sessionid从数据库查询出session,如果找不到就insert一条新的,可以想象这个数据量是非常巨大,可以采用reids替换。
今天需要解决java 和python 登录互通的问题,python默认是通过cPickle序列化的,java并不能反序列化cPickle产生的数据,
一种思路就是python 通过json格式来序列化,这样java就能认识了,但发布的时候却失败了,原因第三方登录会往是session里存放一些对象,比如:
class OAuthToken(object):
"""OAuthToken is a data type that represents an End User via either an access
or request token.
key -- the token
secret -- the token secret
"""
key = None
secret = None
callback = None
callback_confirmed = None
verifier = None
def __init__(self, key, secret):
self.key = key
self.secret = secret
token = OAuthToken("token","38fds7979808opin7879878")
print json.dumps(token)
这种对象json会失败的。怎么解决呢?
方案1: 通过YAML
方案2: 通过google protocol buffer
方案3: 只把userid序列化