{
"id": null,
"jsonrpc": "2.0",
"result": {
"web_tours": [ ],
"user_companies": false,
"username": "admin",
"partner_id": ,
"name": "Administrator",
"is_system": true,
"uid": ,
"session_id": "968456939a37f2899d0243a241597caa222e7d48",
"server_version_info": [
,
,
,
"final",
,
""
],
"web.base.url": "http://www.XXX.top",
"server_version": "11.0",
"user_context": {
"lang": "en_US",
"uid": ,
"tz": false
},
"currencies": {
"": {
"symbol": "€",
"position": "after",
"digits": [
, ]
},
"": {
"symbol": "$",
"position": "before",
"digits": [
, ]
}
},
"company_id": ,
"is_superuser": true,
"db": "Odoo_DB"
}
}
以上是odoo在用户登录成功之后返回给客户端的session值得信息,返回这段值得代码在odoo/addons/web/models/ir_http.py这个文件里,具体的方法是
def session_info(self):
user = request.env.user
display_switch_company_menu = user.has_group('base.group_multi_company') and len(user.company_ids) >
version_info = odoo.service.common.exp_version()
return {
"session_id": request.session.sid,
"uid": request.session.uid,
"is_system": request.env.user._is_system(),
"is_superuser": request.env.user._is_superuser(),
"user_context": request.session.get_context() if request.session.uid else {},
"db": request.session.db,
"server_version": version_info.get('server_version'),
"server_version_info": version_info.get('server_version_info'),
"name": user.name,
"username": user.login,
"company_id": request.env.user.company_id.id if request.session.uid else None,
"partner_id": request.env.user.partner_id.id if request.session.uid and request.env.user.partner_id else None,
"user_companies": {'current_company': (user.company_id.id, user.company_id.name), 'allowed_companies': [(comp.id, comp.name) for comp in user.company_ids]} if display_switch_company_menu else False,
"currencies": self.get_currencies(),
"web.base.url": self.env['ir.config_parameter'].sudo().get_param('web.base.url', default=''),
}
那么session_id有时在何时产生的,又是保存到哪里,有效时间是多少呢?
这些问题这2篇文章给了不错的回答,odoo web机制浅析和odoo Session有效期。
看完这两篇文章之后,我们可以简单的认为Session就是一个唯一的字符串,向GUID一样,然后我们给这个唯一的字符串设定一段有效时间,不管是一周还是一个月,这完全由程序开发人员设定一个规则。odoo是把Session字符串保存在磁盘上了,其实我们也可以产生唯一的字符串保存到数据库中,然后设置个过期时间,方式是多样的,关键还是理解Session到底是怎么一回事。