Qualquer pessoa que tenha escrito um ASP um pouco maior sabe que o objeto Session é realmente fácil de usar. Ele pode ser usado para registrar variáveis de dados privados do usuário, o que é seguro e conveniente. Mas você realmente sabe como funciona o Session? Qualquer pessoa que tenha escrito um ASP um pouco maior sabe que o objeto Session é realmente fácil de usar. Ele pode ser usado para registrar variáveis de dados privados do usuário, o que é seguro e conveniente. Mas você realmente sabe como funciona o Session? Talvez depois de entendê-lo você não ouse mais usar esse objeto amado e odiado. Embora o método alternativo seja um pouco problemático, após consideração a longo prazo, ele deve ser executado.
Primeiro, vamos falar sobre os benefícios do Session. Ele pode ser usado para registrar variáveis de dados privados do cliente e não desaparecerá dentro do intervalo de tempo. Esta é realmente uma função importante, especialmente para sistemas com membros que devem ser utilizados. Como a conta de login do membro, horário, status e muitos dados em tempo real que devem ser registrados (como o sistema de compras registrando os itens na cesta de compras do usuário. Essas informações são de necessidade privada de cada usuário e geralmente são usadas pelos desenvolvedores). . Processamento de registro de sessão.
Porém, a Sessão em ASP é composta por Cookies, e o servidor transmite todos os dados registrados na Sessão para o navegador do usuário na forma de Cookies. Normalmente, os navegadores gerais armazenam esses cookies. Sempre que o usuário clica em um link e se conecta ao servidor novamente, o navegador envia esses cookies de volta ao servidor para processamento. Este é o princípio de funcionamento da Sessão. Quando a quantidade de dados é maior, pois devem ser enviados e recebidos de volta, isso não apenas consome largura de banda da linha, mas também reduz o desempenho porque o servidor deve gastar mais recursos no processamento online e na reconfiguração. memória. Ação inicial. Agora você pode estar pensando: “Tenho que usar essa função, então tenho que sacrificá-la”. Porém, este artigo fala sobre Session. Por um lado, ensina como usá-la menos, é claro; existem alternativas. A próxima coisa que surge é que ele também pertence ao objeto Global.asa.
O aplicativo também é bom para registrar e processar dados temporários. Suas capacidades e uso são iguais aos da Sessão em todos os aspectos. Porém, em comparação, os dados que ele registra são públicos, ou seja, um espaço variável que pode ser compartilhado por qualquer usuário. Ao contrário da Sessão, o Aplicativo não transfere dados para o usuário e aguarda a próxima conexão para lê-los de volta. Ele é gravado diretamente na memória do Servidor. Em comparação, o desempenho é muito mais rápido que o da Sessão.
Como o objeto Aplicação é público, a primeira coisa que deve ser feita é planejar uma área comum para cada usuário, para que cada usuário possa ter sua própria área de registro de dados, de forma a atingir o objetivo de simular Sessão. Existem duas abordagens agora:
1. Inicializar, criar e alocar espaço de memória do usuário antecipadamente quando o Servidor for ativado Normalmente, embora essa abordagem ocupe muitos recursos assim que o Servidor for iniciado, ela também evita o trabalho de ter que alocá-lo toda vez que o usuário. estará online no futuro. Mas há uma limitação. Este método deve limitar o número máximo de pessoas. Como é inicializado assim que é ativado, só podemos estimar a criação de uma certa quantidade de espaço de memória, por isso este método é normalmente usado em programas pequenos. como salas de bate-papo.
2. Este método deve ser considerado mais apropriado para aplicações de grande escala. Ele adota um método de alocação dinâmica e começa a alocar recursos ao usuário quando ele se conecta pela primeira vez ao servidor. O objetivo desses dois métodos de simulação de Session é reduzir o consumo de recursos de Session, mas afinal eles não podem ser totalmente substituídos. Ainda precisamos usar um pouco de Session, o que pelo menos pode reduzir muito a carga do Session. Servidor.
Primeira opção
Primeiro iniciamos a implementação da primeira solução Como a Aplicação é inicializada durante a ativação, é claro que temos que começar pelo Global.asa:
A inicialização foi concluída, mas como usá-la? Precisamos apenas alterar os dados originalmente armazenados usando Session, como número da conta e horário de login, no objeto Application que criamos onde o usuário faz login:
Copie o código do código da seguinte forma:
'Procure espaço não utilizado
Para i = 1 para aplicativo (ClientMax)
Se Aplicativo (User_Status_ & i) = 0 Então
'Número temporário do usuário
Sessão (Índice) = i
'bloqueio
Aplicativo Application.Lock
'Definir para estado usado
Application(User_Status_ & i) = 1 'Coloque dados variáveis
Aplicativo (User_Account_ & i) = Conta
Aplicativo(User_Logtime_ & i) = Agora()
'Desbloquear
Aplicativo.Desbloquear
Sair para
Terminar se
Próximo
Para obter dados variáveis relacionados ao usuário, faça o seguinte:
Response.Write(Application(User_Account_ & Session(Index))
Você pode descobrir que não é dito para não usar Session? Então por que a Sessão ainda existe no código-fonte acima? Como mencionado anteriormente, esta alternativa não pode substituir completamente a Sessão. O navegador nem sempre está online com o Servidor. Ele será desconectado após a leitura da página. Neste momento, devemos contar com a Sessão. Fornecemos ao usuário um conjunto de números em tempo real. Este número é o número do espaço variável do usuário no Aplicativo. Você pode imaginar que existem muitos cofres no banco. uma chave, e a chave Há um número nela, e o número na chave permite que o funcionário o conduza ao seu próprio cofre. Ainda existem melhorias neste método, mas é suficiente para pequenas aplicações.
Segunda opção
Em relação à solução anterior, você também pode pensar que nossos números customizados são gravados usando Session. Falando em números, o objeto Session fornece um método "SessionID". Isso mesmo, independentemente de querermos utilizá-lo ou não, o Servidor irá atribuir automaticamente um número a cada usuário, e este número não se repetirá. Já este número é obtido através de Session.SessionID. Essa numeração é uma ação que o Session com certeza fará. Podemos usá-la para substituir o programa de numeração que nós mesmos escrevemos, o que também economiza muito esforço e ainda proporciona maior escalabilidade. Mas basicamente, a primeira solução acima ainda tem suas utilidades, como pequenos aplicativos como salas de chat que limitam o número de pessoas. A próxima alternativa é para sistemas maiores.
Para sites com centenas, milhares ou até dezenas de milhares de visitantes por segundo, a solução anterior definitivamente não funcionará. Suponha que você defina o limite superior do número de pessoas para 10.000. Uma vez ativado, o servidor o ajudará a cortar 10.000 áreas para 10.000 usuários. Se houver 5 variáveis em uma área e uma variável ocupar 32 bytes, 10.000 ocupará mais. superior a 320.000 K (320 MB), servidor Assim que é ativado, muito lixo é colocado na memória, e o desempenho certamente será muito reduzido antes de entrar no campo de batalha e não olhe para esses pequenos números e pense que seus 512 MB serão; suficiente. Os números acima estão assumindo um número mínimo, mais Não se sabe quantos recursos adicionais o servidor usará ao configurar a memória, então será apenas mais, não menos. Portanto, a única solução é configurar dinamicamente o espaço variável do usuário, e apenas recortar uma área quando o usuário estiver conectado ao servidor. Dessa forma, não há necessidade de configurar antecipadamente uma grande memória.
A segunda opção é relativamente simples de implementar. Por favor, jogue fora tudo na primeira opção. Não precisamos tocar em Global.asa. Só precisamos alterar o local de login do usuário e outros locais úteis.
Copie o código do código da seguinte forma:
'LockApplicationApplication.Lock 'Coloque dados variáveis
Aplicativo (User_Account_ & Session.SessionID) = Conta
Application(User_Logtime_ & Session.SessionID) = Now() 'Desbloquear Application.Unlock
Para obter dados variáveis relacionados ao usuário, faça o seguinte:
Copie o código do código da seguinte forma:
Response.Write(Application(User_Account_ & Session.SessionID))
No passado, li muitos livros que diziam que as sessões exigiam muitos recursos, então tente não usá-los, mas você ainda terá que usá-los quando for necessário, e os livros não ensinavam nenhuma solução mais apropriada. Agora que você já sabe como substituir o Session, aproveite! Talvez os problemas de desempenho que sempre me incomodaram possam ser melhorados bastante!