zoukankan      html  css  js  c++  java
  • Django-session组件

    Django-session组件

    session是服务器技术,把数据存在服务器上;而Cookie会被客户端浏览器保存起来。

    django中session语法

    1、设置Sessions值
              request.session['session_name'] ="admin"
    2、获取Sessions值
              session_name = request.session["session_name"]
    3、删除Sessions值
              del request.session["session_name"]
    4、flush()
         删除当前的会话数据并删除会话的Cookie。
         这用于确保前面的会话数据不可以再次被用户的浏览器访问
    5、get(key, default=None)
      fav_color = request.session.get('fav_color', 'red')  
    6、pop(key)
      fav_color = request.session.pop('fav_color')  
    7、keys()
    8、items()  
    9、setdefault()  
    10 用户session的随机字符串
            request.session.session_key
    
            # 将所有Session失效日期小于当前日期的数据删除
            request.session.clear_expired()
    
            # 检查 用户session的随机字符串 在数据库中是否
            request.session.exists("session_key")
    
            # 删除当前用户的所有Session数据
            request.session.delete("session_key")
    
            request.session.set_expiry(value)
                * 如果value是个整数,session会在些秒数后失效。
                * 如果value是个datatime或timedelta,session就会在这个时间后失效。
                * 如果value是0,用户关闭浏览器session就会失效。
                * 如果value是None,session会依赖全局session失效策略。

    保存登陆状态信息和上次登陆时间

    def login_session(request):
        if request.method == 'POST':
            user = request.POST.get('user')
            pwd = request.POST.get('pwd')
    
            user = UserInfo.objects.filter(user=user, pwd=pwd).first()
    
            if user:
                request.session['is_login'] = True
                request.session['username'] = user.user
    
                import datetime
                now = datetime.datetime.now().strftime('%Y-%m-%d %X')  # 记录上次登陆login-session的时间
                request.session['last_visit_time'] = now
    
                '''
                1.生成一个随机字符串  5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog
                2.response.set_cookie('sessionid',5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog
                3.在django_session表中创建一条记录:
                            session-key                                 session-data
                    5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog    {'is_login':True,'username':edward}
                '''
    
                return HttpResponse('登陆成功 ')
    
        return render(request, 'login.html')
    
    def index_session(request):
        # print('login',request.session['is_login'])   找不到会报错 print('login', request.session.get('is_login'))  # 找不到不会报错
        '''
        1. request.COOKIE.get('session') 
        
        2. django-session表中过滤记录:
        
               session-key                               session-data
        5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog    {'is_login':True,'username':edward}
        
        obj = django-session.objects.filter(session-key=5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog).first
        
        3. obj.session-data.get('is_login')
        '''
    
        is_login = request.session.get('is_login')
        if not is_login:
            return redirect('/login-session/')
    
        username = request.session.get('username')
        last_visit_time = request.session.get('last_visit_time')
    
        return render(request, 'index.html', {'username': username, 'last_visit_time': last_visit_time})

    session的更新操作

    一个服务器和一个浏览器只用一个session_key来维持,如果更新了账号密码,不会创建新的session_key,只会更新session_key对应的session_data。

    '''
    if request.COOKIE.get('sessionid'):
        更新
    
        在django-session表中更新一条记录:
            session-key                                 session-data
        5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog                    更新
    
    else:
        1.生成一个随机字符串  5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog
        2.response.set_cookie('sessionid',5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog
        3.在django_session表中创建一条记录:
            session-key                                 session-data
        5j1d3jrfmjbnblnm3fz1fqfdmxi2vjog    {'is_login':True,'username':edward}
                '''

    session的注销功能

    def login_out(request):
        # del request.session['is_login']  # 只删除了一个键值,我们要做的是删除整条记录
    
        request.session.flush()
        '''
        flush()做的三个操作
        
        1.random_str = request.COOKIE.get("sessionid")
        
        2.django-session.objects.filter(session-key=random_str).delete()
        
        3.response.delete_cookie("sessionid",path="/",random_str)   把cookie也删了
        '''
    
        return redirect('/login/')

    html

    <a href="/login-out">注销 </a>

    session配置‘

    django默认支持Session,并且默认是将Session数据存储在数据库中,即:django_session 表中。
       
    a. 配置 settings.py
       
        SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)
           
        SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
        SESSION_COOKIE_PATH = "/"                               # Session的cookie保存的路径(默认)
        SESSION_COOKIE_DOMAIN = None                             # Session的cookie保存的域名(默认)
        SESSION_COOKIE_SECURE = False                            # 是否Https传输cookie(默认)
        SESSION_COOKIE_HTTPONLY = True                           # 是否Session的cookie只支持http传输(默认)
        SESSION_COOKIE_AGE = 1209600                             # Session的cookie失效日期(2周)(默认)
        SESSION_EXPIRE_AT_BROWSER_CLOSE = False                  # 是否关闭浏览器使得Session过期(默认)
        SESSION_SAVE_EVERY_REQUEST = False                       # 是否每次请求都保存Session,默认修改之后才保存(默认)  如果设置为True了,每次访问都会往后推一天
  • 相关阅读:
    [solution]xdebug正确配置,但不显示错误信息
    SIGCHLD信号
    sigsuspend
    信号引起的竞态
    智力面试题
    可重入和不可重入
    信号—信号处理函数(捕捉)
    PCB信号集
    信号产生的原因:
    信号初步
  • 原文地址:https://www.cnblogs.com/hexiaorui123/p/10584785.html
Copyright © 2011-2022 走看看