2009-10-23 6 views
1

Je rencontre des problèmes pour que l'état de session fonctionne correctement dans mon application ASP.Net. J'ai placé EnableSessionState="true" dans toutes mes directives <%@ Page %> mais je semble toujours obtenir un ID de session différent sur chaque page.L'état de la session ASP.Net n'est pas activé correctement

J'utilise une page maître que je ne peux pas trouver un moyen de spécifier EnableSessionState pour (je suppose que si la page en utilisant il a l'état de session, alors il fait?)

Je me suis fixé l'élément <sessionState> dans mon Web.config pour utiliser l'état de session InProc avec des cookies, mais cela semble n'avoir aucun effet - Je cours IIS 7 donc je m'attendrais à ce que la section <system.web> soit ignorée en faveur de la section <system.webServer> et il ne semble pas y avoir de élément de configuration équivalent pour l'état de la session dans ce (ou ce n'est pas évident). J'ai essayé de faire des recherches sur ce sujet, mais je n'arrive pas à trouver quelque chose qui explique exactement ce que je dois faire pour activer l'état de session sur l'ensemble de mon application et fonctionner correctement. Des idées quelqu'un?

Mon fichier Web.config est comme ci-dessous et je peux poster plus de détails si nécessaire.

<?xml version="1.0"?> 
<configuration> 
    <configSections> 
     <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
      <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
       <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> 
       <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> 
        <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/> 
        <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> 
        <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> 
        <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> 
       </sectionGroup> 
      </sectionGroup> 
     </sectionGroup> 
    </configSections> 
    <appSettings> 
     <add key="DBServer" value="localhost"/> 
     <add key="DBName" value="bbcdemo"/> 
     <add key="DBUser" value="example"/> 
     <add key="DBPassword" value="password"/> 

    <add key="DemoEndpoint" value="http://nottm.ecs.soton.ac.uk/BBCDemo/sparql/"/> 

    <add key="/BBCDemo/sparql/" value=""/> 
    <add key="LoadMode" value="PreloadAllAsync" /> 
    <add key="DefaultQueryFile" value="~/App_Data/default.rq"/> 
    <add key="Stylesheet" value="/BBCDemo/bbcdemo.css"/> 

    <add key="RewriteRuleFind1" value="^.*programmes/([A-Za-z0-9]+)$"/> 
    <add key="RewriteRuleReplace1" value="http://www.bbc.co.uk/programmes/$1#programme"/> 

    </appSettings> 
    <connectionStrings/> 
    <system.web> 
     <!-- 
      Set compilation debug="true" to insert debugging 
      symbols into the compiled page. Because this 
      affects performance, set this value to true only 
      during development. 
     --> 
     <compilation debug="true"> 
      <assemblies> 
       <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 
       <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 
       <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
       <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 
      </assemblies> 
     </compilation> 
     <!-- 
      The <authentication> section enables configuration 
      of the security authentication mode used by 
      ASP.NET to identify an incoming user. 
     --> 
     <authentication mode="Windows"/> 
     <!-- 
      The <customErrors> section enables configuration 
      of what to do if/when an unhandled error occurs 
      during the execution of a request. Specifically, 
      it enables developers to configure html error pages 
      to be displayed in place of a error stack trace. 

     <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> 
      <error statusCode="403" redirect="NoAccess.htm" /> 
      <error statusCode="404" redirect="FileNotFound.htm" /> 
     </customErrors> 
     --> 
     <pages> 
      <controls> 
       <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
       <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      </controls> 
     </pages> 
     <httpHandlers> 
      <remove verb="*" path="*.asmx"/> 
      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/> 
     </httpHandlers> 
     <httpModules> 
      <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     </httpModules> 
    <sessionState mode="InProc" timeout="20" cookieless="UseCookies" /> 
    </system.web> 
    <system.codedom> 
     <compilers> 
      <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
       <providerOption name="CompilerVersion" value="v3.5"/> 
       <providerOption name="WarnAsError" value="false"/> 
      </compiler> 
     </compilers> 
    </system.codedom> 
    <!-- 
     The system.webServer section is required for running ASP.NET AJAX under Internet 
     Information Services 7.0. It is not necessary for previous version of IIS. 
    --> 
    <system.webServer> 
     <validation validateIntegratedModeConfiguration="false"/> 
     <modules> 
      <remove name="ScriptModule"/> 
      <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     </modules> 
     <handlers> 
      <remove name="WebServiceHandlerFactory-Integrated"/> 
      <remove name="ScriptHandlerFactory"/> 
      <remove name="ScriptHandlerFactoryAppServices"/> 
      <remove name="ScriptResource"/> 
     <remove name="SPARQLHandler"/> 
      <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
      <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
     <add name="SPARQLHandler" verb="*" path="sparql/" type="VDS.RDF.Web.SPARQLHandler"/> 
     <add name="ResourceHandler" verb="*" path="programmes/*" type="VDS.RDF.Web.SQLResourceHandler"/> 
     </handlers> 
    </system.webServer> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
      <dependentAssembly> 
       <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/> 
       <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/> 
      </dependentAssembly> 
      <dependentAssembly> 
       <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/> 
       <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/> 
      </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

Avant que quiconque ne couine à moi pour le stockage des paramètres DB dans AppSettings Je tiens à souligner que, dans la production, je chiffrer la section <appSettings> et que le compte de base de données utilisé uniquement a (et besoins) en lecture seule privilèges sur le particulier base de données.

+0

ne semble pas être lié à mon problème m mais peut expliquer des problèmes similaires lorsque ASPX et ASHX sont mélangés - http://www.hanselman.com/blog/GettingSessionStateInHttpHandlersASHXFiles.aspx – RobV

Répondre

2

Paramètre EnableSessionState = true n'atteint pas vraiment grand-chose, il est appliqué par défaut à l'ensemble de l'application. Pour vous assurer que votre configuration IIS7 est correcte, vous pouvez essayer d'exécuter ce qui suit command:

appcmd set config /commit:WEBROOT /section:sessionState /mode:InProc 

Si vous voyez une nouvelle SessionID sur chaque page, il pourrait tout simplement que votre client ne stocke pas/transmettre la session cookie (peut-être à cause des restrictions de sécurité sur le navigateur). Vérifiez d'abord que vous présentez effectivement le cookie de session et que toutes les requêtes sont servies depuis le même domaine.

Pour vérifier que ce n'est pas un problème de cookie, vous pouvez changer l'état de session pour utiliser le mode cookieless pour voir si la session correcte est chargé sur les demandes suivantes:

<sessionState cookieless="UseUri" /> 
-1

Je vérifiais l'état de session paramètres à partir de votre Web.Config. Je crois qu'il y a une faute de frappe. S'il vous plaît vérifier le web.config nouveau et tester .....

Dans la balise SessionState, l'cookieless attribut accepte uniquement la valeur de « true » ou « false », mais votre web.config montre que « usecookies »

<sessionState mode="InProc" timeout="20" cookieless="UseCookies" /> 

S'il vous plaît définir la valeur de cookieless à vrai ou faux et essayez à nouveau .. Espérons que cela résoudra le problème ....

+2

Ceci est incorrect.L'attribut cookieless peut avoir l'une de ces 6 valeurs: autoDetect, UseCookies, UseDeviceProfile, UseUri, true, false. Voir http://msdn.microsoft.com/en-us/library/h6bb9cz9.aspx pour plus d'informations. –

Questions connexes