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到底是怎么一回事。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM