zoukankan      html  css  js  c++  java
  • day40

    session / cookies :

    • 会话跟踪技术是Cookie与Session
    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。
    
    Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。
    
    Web应用程序是使用HTTP协议传输数据的。HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。
    
    Cookie就是这样的一种机制。它可以弥补HTTP协议无状态的不足
    
    HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理
    
    Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。
    
    查看某个网站颁发的Cookie很简单。在浏览器地址栏输入javascript:alert (document. cookie)
        Cookie具有不可跨域名性
        浏览器判断一个网站是否能操作另一个网站Cookie的依据是域名。
        
        
        
    session :    增加了服务器的存储压力。
    session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
    
    Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。
    
    ession对象是在客户端第一次请求服务器的时候创建的。Session也是一种key-value的属性对
    
    为防止内存溢出,服务器会把长时间内没有活跃的Session从内存删除。这个时间就是Session的超时时间。如果超过了超时时间没访问过服务器,Session就自动失效了。
    
    

    单列模式 :

    class sql:
        
        __instance =None
        def __new__(cls,*args,**kwargs):
            if not cls.__instance:
                cls.__instance = object.__new__(cls)
            return cls.__instance
        
    	@classmethod
    	def singleton(cls):
            if not cls.__instance:
                cls.__instance = cls()
            return cls.__instance
    

    优酷的客服端和服务端的 scoket 连接

    #youku_client
    import socket
    from db import session_data
    from conf import settings
    import struct
    session_data.mutex = Lock()
    def get_client():
        client = socket.socket()
        client.connect(
        	(setting.ip,settings.port))
    	return client
    def send_and_back(send_dic,client):
        json_data = json.dumps(send_dic).encode('utf-8')
        headers = struct.pack('i',len(json_data))
        client.send(headers)
        client.send(json_data)
        
        headers = client.recv(4)
        data_len = struct.unpack('i',headers)[0]
        json_data = client.recv(data_len).decode('utf-8')
        back_dic = json.loads(json_data)
    	return back_dic
    
    
    #youku_server
    server = socket.socket()
    server.bind(
    	(setting.ip,settings.port))
    server.listen(5)
    func_dic = {
        'register':admin_api.register_api,
    }
    pool = ThreadPoolExecutor(100)
    def run():
        print('启动服务器...')
        while True:
            conn,addr= server.accept()
            print(addr)
            
            pool.submit(working,conn,addr)
    def dispatcher(back_dic,conn):
        type = back_dic.get('type')
        
        if type in func_dic:
            func_dic.get(type)(back_dic,conn)
            
    def working(conn,addr):
        while True:
            try:
                headers = conn.recv(4)
                data_len = struct.unpack('i',headers)[0]
                json_data = conn.recv(data_len).decode('utf-8')
                
                back_dic = json.loads(json_data)
                back_dic['addr'] = str(addr)
                dispatcher(back_dic,conn)
    		except Exception as e:
                print(e)
                session_data.mutex.acquire()
                session_data.session_dict.pop(str(addr))
                session_data.mutex.release()
                break
                
    
  • 相关阅读:
    VC++2012编程演练数据结构《25》线索二叉树
    VC++2012编程演练数据结构《26》最大堆二叉树
    VC++2012编程演练数据结构《19》散列文件
    VC++2012编程演练数据结构《21》二叉排序树
    VC++2012编程演练数据结构《23》二叉树排序
    VC++2012编程演练数据结构《22》常规排序算法
    VC++2012编程演练数据结构《27》最小堆二叉树
    VC++2012编程演练数据结构《20》索引文件
    自从来到了上海,开始工作以来就没怎么到博客园
    Graphics 单元中的类
  • 原文地址:https://www.cnblogs.com/shaozheng/p/11808779.html
Copyright © 2011-2022 走看看