中国最大的 Web 开发资源网站及技术社区 ,
implementação ASP
A sessão ASP nativa pode armazenar apenas os dados da sessão na memória. Para armazenar os dados da sessão no SQL Server, um objeto personalizado do Microsoft® Visual Basic® 6.0 COM é gravado para gerenciar o estado da sessão em vez de usar o objeto de sessão nativa. Este objeto COM será instanciado no início de cada solicitação da Web e recarregue os dados da sessão do SQL Server. Quando o script ASP for concluído, esse objeto será encerrado e o estado da sessão será persistido de volta ao SQL Server.
O objetivo principal do objeto Visual Basic Basic 6 Com session é fornecer acesso aos objetos intrínsecos do Microsoft® Internet Information Server. O objeto Visual Basic 6.0 Com Session usa a classe MySession of SessionUtility Assembly para manter o estado da sessão e a classe SessionPerSistence de SessionUtilidade para carregar e salvar dados da sessão com o SQL Server. As classes de misession e sessões são expostas como objetos COM usando o utilitário regasm.exe. O utilitário regasm.exe pode se registrar e criar uma biblioteca de tipos para o cliente COM consumir classes da estrutura.
As informações do estado da sessão são recarregadas durante a construção do objeto. O construtor (Class_initialize) recuperará o cookie da sessão, o tempo limite da sessão (SessionTimeout) e a String de conexão com o banco de dados (sessõesn) do objeto Application e criará uma instância da classe MySession para manter os dados da sessão. Em seguida, o construtor tentará recarregar os dados da sessão do SQL Server com o cookie fornecido. Se o servidor SQL não tiver as informações da sessão ou a sessão foi expirada, um novo cookie será emitido. Se o SQL sever retornar com os dados do estado da sessão, o estado da sessão será armazenado no objeto MySession.
Sub -classe privado_initialize ()
no erro goto errhandler:
const métod_name como string = classe_initialize
Definir mySessionPerSistência = nova sessão
set myObjectContext = getObjectContext ()
mySessionId = readSessionId ()
mydsnstring = getConnectionDsn ()
myTimeout = getSessionTimeout ()
myisnewsession = false
Ligue para o initContents
Sub
ErrHandler:
err.raise err.number, métod_name &: & err.source, err.description
final sub
Sub InitContents privado ()
no erro goto errhandler:
const métod_name como string = initContents
Se mySessionId = então
Definir myContentSentity = New MySession
mySessionId = mySessionPerSistence.GenerateKey
MyisNewsession = True
outro
Defina myContentSentity =
MySessionPerSistence.LoadSession (MySessionId, Mydsnstring, MyTimeout)
final se
Sub
ErrHandler:
err.raise err.number, métod_name &: & err.source, err.description
final sub
Quando a instância do objeto sai do escopo do script, o destruidor (Class_termine) será executado. O destruidor persistirá os dados da sessão usando o método SessionPerSistence.SaveSession (). Se for uma nova sessão, o destruidor também enviará o novo cookie de volta ao navegador.
Sub -classe particular ()
no erro goto errhandler:
const métod_name como string = classe_terminate
Chamada setDataForSessionId
Sub
ErrHandler:
err.raise err.number, métod_name &: & err.source, err.description
final sub
Sub Set DataForSessionID () Private
no erro goto errhandler:
const métod_name como string = setDataForSessionId
ligue para mySessionPerSistence.SaveSession (mySessionId,
mydsnsnstring, mycontententity, myisnewsession)
Se MyisNewsession então Call WritesessionId (MySessionId)
Definir myContentSentity = nada
set myObjectContext = nada
Defina mySessionPerSistence = nada
Sub
ErrHandler:
err.raise err.number, métod_name &: & err.source, err.description
final sub
Você pode baixar o código -fonte do projeto ASP.NET Sessionutility, o Com Session Manager e o código de demonstração clicando no link na parte superior do artigo.
Programa de demonstração
O programa de demonstração foi projetado para incrementar e exibir um número. Independentemente de qual página esteja carregada, o número continuará incrementando porque o valor do número é armazenado no SQL Server e é compartilhado entre asp clássicos e asp.net.
Etapas para configurar o programa de demonstração
Crie um novo banco de dados chamado sessionDemodb.
Crie a tabela SessState (osql.exe –e –d sessiondemodb –i session.sql).
Crie um novo diretório virtual chamado Demo.
Desligue a sessão ASP na guia Configuração do ASP.
Copie o web.config, testpage.aspx, global.asa, testpage.asp e globalinclude.asp para o diretório virtual.
Atualize a configuração de string dsn no global.asa e web.config. A configuração do tempo limite da sessão é opcional. O padrão é de 20 minutos.
Instale o sessionutility.dll no cache global de montagem (gacutil /i sessionutility.dll).
Exponha o sessionutility.dll como um objeto COM usando o regasm.exe (regasm.exe sessionutility.dll /tlb:sessionutility.tlb).
Copie o SessionManager.dll para um diretório local e use o regsvr32.exe para registrá -lo (Regsvr32 sessionmanager.dll).
Conceda a conta IUSR_ <Crocination_Name> para ler e executar o acesso ao sessionmgr.dll.
Etapas para executar o programa de demonstração
Inicie o Microsoft® Internet Explorer.
Carregue o testpage.asp para o clássico ASP. O número 1 deve aparecer na página da web.
Clique em Atualizar no Internet Explorer para recarregar a página. o número deve ser incrementado.
Altere o URL para testpage.aspx para asp.net. O número deve manter o incremento.
O mesmo processo pode ser repetido iniciando a página testpage.aspx primeiro.
incorporando o objeto COM em um aplicativo ASP existente
Uma prática comum no desenvolvimento de aplicativos ASP é incluir um arquivo no início de cada script para compartilhar códigos e constantes comuns. A melhor maneira de incorporar o objeto de sessão personalizada é adicionar o código de instanciação no arquivo incluído comum. A última etapa é simplesmente substituir toda a referência ao objeto de sessão pelo nome da variável de sessão personalizada.
Limitação/melhoria
Esta solução não suportará um aplicativo ASP existente que armazena um objeto COM no objeto da sessão. Nesse caso, é necessário um marechaler personalizado para serializar/desserializar os estados, a fim de usar o objeto de sessão personalizado. Além disso, esta solução não suporta armazenar matrizes de tipos da string. Com algum esforço adicional, esse recurso pode ser implementado usando a função Microsoft® Visual Basic® 6.0 Junção para combinar todos os elementos da matriz em uma única string antes de armazená -la no objeto de sessão. O reverso pode ser feito usando a função Visual Basic 6.0 Split para dividir a string de volta aos elementos de matriz individual. No lado da estrutura .NET, os métodos de junção e divisão são membros da classe String.
conclusão
O ASP.NET representa um novo paradigma e arquitetura de programação e oferece muitas vantagens sobre o ASP clássico. Embora a porte do ASP para o ASP.NET não seja um processo simples, o melhor modelo de programação e o desempenho aprimorado do ASP.NET farão com que o processo de conversão valha a pena. Com exceção de armazenar um objeto COM no objeto de sessão, a abordagem descrita neste artigo oferece uma solução que tornará o processo de migração mais simples.
sobre o autor
Billy Yuen trabalha no norte da Califórnia no Microsoft Technology Center Silicon Valley. Este centro se concentra no desenvolvimento da Microsoft .Net Framework Solutions. Ele pode ser contatado em [e -mail protegido]