• odoo11登录之后返回的session信息分析


    {
        "id": null, 
        "jsonrpc": "2.0", 
        "result": {
            "web_tours": [ ], 
            "user_companies": false, 
            "username": "admin", 
            "partner_id": 3, 
            "name": "Administrator", 
            "is_system": true, 
            "uid": 1, 
            "session_id": "968456939a37f2899d0243a241597caa222e7d48", 
            "server_version_info": [
                11, 
                0, 
                0, 
                "final", 
                0, 
                ""
            ], 
            "web.base.url": "http://www.XXX.top", 
            "server_version": "11.0", 
            "user_context": {
                "lang": "en_US", 
                "uid": 1, 
                "tz": false
            }, 
            "currencies": {
                "1": {
                    "symbol": "", 
                    "position": "after", 
                    "digits": [
                        69, 
                        2
                    ]
                }, 
                "3": {
                    "symbol": "$", 
                    "position": "before", 
                    "digits": [
                        69, 
                        2
                    ]
                }
            }, 
            "company_id": 1, 
            "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) > 1
            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到底是怎么一回事。

  • 相关阅读:
    leetcode[68] Climbing Stairs
    leetcode[67] Plus One
    17_8_16 接口实例化的方法
    17_8_15 lambda 表达式
    17_8_14 回调函数
    17_8_11 Spring Jdbc+Dbcp
    17_8_10 eclipse 中复制网上代码 出现 报错 问题(0)
    17_8_10 PostgreSql Mac
    17_8_10 项目开发流程
    17_8_9 html 不常用的标签
  • 原文地址:https://www.cnblogs.com/crazyguo/p/9010833.html
Copyright © 2020-2023  润新知