0

ユーザーにログイン、ログアウトなどを登録してもらいたいWebアプリケーションを作成しました。

今のところ、登録プロセスを通じてユーザーをガイドするカスタム CreateUserWizard を作成しました。

私の Web アプリケーションには、Login、Register、Services、および Default など、いくつかの aspx ページが含まれています。

ユーザーがサイトにアクセスすると、Default.aspx ページが表示され、そこに次の 3 つのリンクを持つ水平ナビゲーション バーが表示されます。ユーザーは自分のサービスを確認できます) と、ユーザーをログイン ページに移動させるログイン リンク (ASP ログイン コントロール) があります。

ユーザーが初めてページにアクセスしたときに表示される Default.aspx ページのコンテンツは、やはり登録フォームです。

これで、新しいユーザーを正常に登録でき、その資格情報がメンバーシップ データベースに保存され、登録済みユーザーとしてログインできるようになりました。

ユーザーが正常にログインすると、Services.aspx ページが表示されます。

問題は、ログイン後に Services.aspx ページにアクセスし、水平ナビゲーション バーのリンクをクリックすると、ユーザーが自動的にログアウトされることです。

認証タグの Web.config ファイルのフォームセクションで、Cookie を使用しないように設定しましたが、代わりにcookieless="UseUri"を使用します。

これを行ったのは、Cookie を使用すると、ユーザーがログインしたときに LoginView コントロールに LoggedinTemplate (ログインしたユーザーの名前) が表示されず、AnonymousTemplate のメッセージが表示され続けるためです。

なぜこれが起こっているのかわかりませんが、クッキーを使用していないという事実で何かをしなければならないと推測しています. 何が問題なのか誰にも分かりますか?

以下に、登録用のウィザードと Web.config ファイルがある Default.aspx ページのコードを示します。

**正しい方向に私を向けてください、または私がここで間違っていることを教えてください.

デフォルト.aspx :

<%@ Page Title="" Language="vb" AutoEventWireup="false"


   MasterPageFile="~/GDesk.Master"
        CodeBehind="Default.aspx.vb" Inherits="GDesk._Default" %>

        <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
            <link rel="stylesheet" type="text/css" href="/Styles/styles.css" />
        </asp:Content>
        <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
        <h2>
            Welcome </h2>
        <div id="SignUpForm">
            <h2 class="defaultH2">
                Sing Up</h2>
            <p class="info">
                Here you can register. If you already have an account, please log in
    <asp:HyperLink ID="defaultLogin" runat="server"       NavigateUrl="/Account/Login.aspx"
                    Text="here." />
                <span class="important">Passwords are required to be in minimum of
                    <%=Membership.MinRequiredPasswordLength()%>
                    characters.</span>
            </p>
            <span class="failureNotification">
                <asp:Literal ID="errorMessage" runat="server"></asp:Literal>
            </span>
            <p>
    <asp:ValidationSummary ID="ErrorSummary" runat="server" 
               ShowSummary="true"   CssClass="failureNotification"
               ValidationGroup="RegisterMessages" />
    <asp:ValidationSummary ID="CheckErrors" runat="server" 
               ShowSummary="true" CssClass="failureNotification"
               ValidationGroup="CheckExistence" />
    <asp:CreateUserWizard ID="RegisterUser" 
             runat="server" ContinueDestinationPageUrl="Services.aspx"  
             AutoGeneratePassword="false" 
               EnableViewState="true" MailDefinition-BodyFileName="~/MailFile.txt"
                    MailDefinition-From="psf89@yahoo.com" LoginCreatedUser="true">
       <WizardSteps>

          <asp:CreateUserWizardStep ID="CreateUser" runat="server"   
           EnableViewState="true">
               <ContentTemplate>
                  <fieldset class="register">
                    <legend>Account Information</legend>
                      <p>
                        <asp:Label ID="UserNameLabel" runat="server" 
                        Text="Username:" AssociatedControlID="UserName" />
                        <asp:TextBox ID="UserName" runat="server" 
                        CausesValidation="true" CssClass="userEntry"
                        ViewStateMode="Enabled" />
                        <asp:RequiredFieldValidator ID="UserNameRequired" 
                         runat="server" ControlToValidate="UserName"
                        ErrorMessage="Username required" 
                        CssClass="failureNotification" ToolTip="UserName is required"
                        Display="Dynamic" SetFocusOnError="true"        
                        ValidationGroup="RegisterMessages">*
                        </asp:RequiredFieldValidator>
                     </p>
                     <p>
                       <asp:Label ID="EmailLabel" runat="server"    Text="Email:" 
                        AssociatedControlID="Email" />
                       <asp:TextBox ID="Email" runat="server" CausesValidation="true" 
                       CssClass="userEntry" ViewStateMode="Enabled" />
                       <asp:RequiredFieldValidator ID="EmailRequired" runat="server" 
                       ControlToValidate="Email" ErrorMessage="Email Required"  
                       CssClass="failureNotification" ToolTip="Email is required"
                       Display="Dynamic" SetFocusOnError="true"  
                       ValidationGroup="RegisterMessages">*  
                       </asp:RequiredFieldValidator>
                       <asp:RegularExpressionValidator ID="EmailTypeRequired" 
                       runat="server" ControlToValidate="Email"
                       SetFocusOnError="true" ValidationExpression="\w+([-+.']\w+)*@\w+
                       ([-.]\w+)*\.\w+([-.]\w+)*"
                       ValidationGroup="RegisterMessages" Display="Dynamic" 
                        CssClass="failureNotification" ErrorMessage="Give a valid 
                        email" ToolTip="Give a valid email form">*
                        </asp:RegularExpressionValidator>
                    </p>
                                    <p>
                        <asp:Label ID="PasswordLabel" runat="server" 
                        Text="Password:" AssociatedControlID="Password" />
                        <asp:TextBox ID="Password" runat="server"       
                        CausesValidation="true" CssClass="userEntry"  
                         TextMode="Password" />
                       <asp:RequiredFieldValidator ID="PasswordRequired" 
                        ControlToValidate="Password" ErrorMessage="Password Required"
                        runat="server" CssClass="failureNotification" ToolTip="Password 
                        is required" Display="Dynamic" SetFocusOnError="true"    
                       ValidationGroup="RegisterMessages">* 
                       </asp:RequiredFieldValidator>
                    </p>
                    <p>
                                        <asp:Label ID="confirmPasswordLabel" 
runat="server" Text="Confirm Password:" AssociatedControlID="ConfirmPassword" />
                                        <asp:TextBox ID="ConfirmPassword" 
runat="server" CausesValidation="true" CssClass="userEntry"
                                                TextMode="Password" />
                                            <asp:RequiredFieldValidator 
ID="ConfirmPasswordRequired" runat="server" ControlToValidate="ConfirmPassword"
                                                ErrorMessage="Confirm Password  
required" 
CssClass="failureNotification" ToolTip="Confirm password is required"
                                            Display="Dynamic" SetFocusOnError="true" 
ValidationGroup="RegisterMessages">*</asp:RequiredFieldValidator>
                                            <asp:CompareValidator ID="ComparePasswords" 
runat="server" ControlToCompare="Password"
                                                ControlToValidate="ConfirmPassword" 
CssClass="failureNotification" ErrorMessage="Password and Confirmation Password must 
match"
                                                Display="Dynamic" Text="*" 
ValidationGroup="RegisterMessages">*</asp:CompareValidator>
                                    </p>
                                    <p>
                                        <asp:Label ID="SecurityQuestionLabel" 
runat="server" Text="Security Question:" AssociatedControlID="Question" />
<asp:DropDownList ID="Question" runat="server" CssClass="userEntry" 
 CausesValidation="true">
                                                <asp:ListItem Text="--Select one--" 
Value="" />
                                                <asp:ListItem>What is your mother's 
birthday ?</asp:ListItem>
                                                <asp:ListItem>What was your first dog's 
name ?</asp:ListItem>
                                                <asp:ListItem>What was your favorite 
teacher's name ?</asp:ListItem>
                                                <asp:ListItem>What is your favorite 
 actor's 
name ?</asp:ListItem>
                                        </asp:DropDownList>
                                        <br />
                                        <i>In case you forget your password you will be 
asked to answer one of the security
                                                questions you choose here and prompted 
to 
enter the answer you specify below.</i>
                                            <asp:RequiredFieldValidator 
ID="SecurityQuestionRequired" runat="server" ControlToValidate="Question"
                                                ErrorMessage="Please select a security 
question" Display="Dynamic" CssClass="failureNotification"
                                                ToolTip="You must select a security 
question in case you forget your password"
                                                SetFocusOnError="true" 
ValidationGroup="RegisterMessages">*</asp:RequiredFieldValidator>
</p>
<p>
                                        <asp:Label ID="SecurityAnswer" runat="server" 
AssociatedControlID="Answer" Text="Security Answer:" />
                                            <asp:TextBox ID="Answer" runat="server" 
CausesValidation="true" CssClass="userEntry" />
                                            <asp:RequiredFieldValidator 
ID="SecurityAnswerRequired" runat="server" ControlToValidate="Answer"
ErrorMessage="Please provite an answer to  the above question" Display="Dynamic"
ToolTip="This is the answer to the question 
you selected above" CssClass="failureNotification"
SetFocusOnError="true" 
ValidationGroup="RegisterMessages">*</asp:RequiredFieldValidator>
      </p>
   </fieldset>
</ContentTemplate>
<CustomNavigationTemplate>
                                <p class="ButtonSubmit">
                                    <asp:Button ID="Previous" runat="server" 
Text="Previous" CommandName="MovePrevious" />
                                        <asp:Button ID="CreateUserButton" 
 runat="server" 
Text="Create User" ValidationGroup="RegisterMessages"
                                            CommandName="MoveNext" />
                                    </p>
                                </CustomNavigationTemplate>
                            </asp:CreateUserWizardStep>
                            <asp:CompleteWizardStep ID="CompleteRegistration" 
runat="server">
                                <ContentTemplate>
                                    <span class="UserCreatedNotification">
                                        <asp:Literal ID="SuccessMessage" runat="server" 
Text="User Registered Succesfully !" />
                                </span>
                            </ContentTemplate>
                            <CustomNavigationTemplate>
                                <p class="ButtonCompletedReg">
                                    <asp:Button ID="Continue" runat="server" 
 Text="Continue" CommandName="Continue" />
                                </p>
                            </CustomNavigationTemplate>
                        </asp:CompleteWizardStep>
                    </WizardSteps>
                </asp:CreateUserWizard>
        </div>
        <div id="VideoPresentation">
            <h2 class="defaultH2">
                Presentation Videoh3</h2>
            <h3>
                Under Constraction...</h3>
        </div>
    </asp:Content>

Web.config ファイルは次のとおりです。

<?xml version="1.0"?>

<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>

  <connectionStrings>
    <clear/>
    <add name="MyLocalSqlServer" connectionString="Data 
    Source=THESAINT\SQLEXPRESS;Initial Catalog=UserAuthentication;Integrated  
    Security=SSPI;"/>
  </connectionStrings>

    <system.web>
        <compilation debug="true" strict="false" explicit="true" targetFramework="4.0" 
        />

        <authentication mode="Forms">
          <forms loginUrl="/Account/Login.aspx" name=".ASPXFORMSAUTH" protection="All" 
            timeout="30" path="/FormsAuth" requireSSL="false" slidingExpiration="true" 
       defaultUrl="Default.aspx" cookieless="UseCookies" 
       enableCrossAppRedirects="false" />
        </authentication>

        <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
          <providers>
            <clear/>
            <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" 
connectionStringName="MyLocalSqlServer" applicationName="GDesk" 
enablePasswordRetrieval="false"
                    enablePasswordReset="true" requiresQuestionAndAnswer="true" 
requiresUniqueEmail="true" passwordFormat="Hashed" maxInvalidPasswordAttempts="5"
                    minRequiredPasswordLength="6" 
 minRequiredNonalphanumericCharacters="0" 
passwordAttemptWindow="10" />
          </providers>
        </membership>

        <authorization>
          <allow users="*"/>
          <deny users="?"/>
        </authorization>   
    </system.web>

  <location path="Services.aspx" >
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>     
    </system.web>
  </location>

</configuration>

前もって感謝します !!!

4

1 に答える 1

0
  1. クッキーレスを使用しないでください!!! とても不安です。

  2. Cookie を使用しない場合は、相対 URL を使用してサイト内を移動します。Services.aspx へのリンクがセッション ID を含まない絶対 URL を使用しているため、ユーザーがログアウトしている可能性があります。

  3. Cookie に問題がある場合は、ログイン フォームが Web サイトのルートにないことが原因である可能性があります。この場合、Cookie には、同じフォルダーにないサイトの部分から Cookie が見えないようにするパスが設定されます。これを回避するには、ログイン フォームを移動するか、フォーム認証 Cookie のパスを明示的に「/」に設定します。

于 2013-10-16T01:16:38.020 に答える