亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ASP.net Membership角色與權限管理

2019-11-17 04:01:29
字體:
來源:轉載
供稿:網友
本文目錄:
1.membership簡介
2.membership在sql server中的設置
3.配置web.config
4.創建用戶CreateUserWizard控件
5.用戶登錄login控件
6.顯示當前用戶的名稱LoginName控件
7.檢測用戶的身份驗證狀態的LoginStatus控件
8.為不同類別用戶呈現不同內容的LoginView控件
9.更改密碼的ChangePassWord控件
10.自助找回密碼的PasswordRecovery控件
11.總結

1.membership簡介

membership,真的很有趣,很方便,很有用。介紹給大家。

asp.net 應用程序中,Membership 類用于驗證用戶憑據并管理用戶設置(如密碼和電子郵件地址)。Membership 類可以獨自使用,或者與 FormsAuthentication 一起使用,以創建一個完整的 Web 應用程序或網站的用戶身份驗證系統。Login 控件封裝了 Membership 類,從而提供一種便捷的用戶驗證機制。

Membership 類提供的功能可用于:
1)創建新用戶。
2)將成員資格信息(用戶名、密碼、電子郵件地址及支持數據)存儲在 Microsoft SQL Server 或其他類似的數據存儲區。
3)對訪問網站的用戶進行身份驗證??梢砸跃幊谭绞綄τ脩暨M行身份驗證,也可以使用 Login 控件創建一個只需很少代碼或無需代碼的完整的身份驗證系統。
4)管理密碼。包括創建、更改、檢索和重置密碼等等??梢赃x擇配置 ASP.NET 成員資格以要求一個密碼提示問題及其答案來對忘記密碼的用戶的密碼重置和檢索請求進行身份驗證。
默認情況下,ASP.NET 成員資格可支持所有 ASP.NET 應用程序。默認成員資格提供程序為 SqlMembershipPRovider 并在計算機配置中以名稱 AspNetSqlProvider 指定。SqlMembershipProvider 的默認實例配置為連接到 Microsoft SQL Server 的一個本地實例。

2.membership在sql server中的設置

要使用membership,需要對數據庫進行一些設置,使用過membership的朋友知道,數據庫中有一些固有的表、視圖和存儲過程,我們自己的表中沒有這些東西。不過,我們可以通過向導來創建它們,那就是aspnet_regsql.exe,一般來說它位于:C:/WINDOWS /Microsoft.NET/Framework/v2.0.50727(我的就在這里)

它既可以創建數據庫中的選項,也可以移除這些設置。

在運行這個程序之前,我在sql server2005中建立了一個空的數據庫:membershipdemo。建立membershipdemo后,我們運行aspnet_regsql.exe,指定membership為membershipdemo。


完成之后,空空的數據庫就有很多內容了,不過具體的內容暫時不必管。繼續后面的內容。



3.配置web.config

web.config也是要修改的。在system.web節點下添加authentication節點。

membership既然是用于成員資格管理,當然要求登錄驗證身份,所以首先加上一個forms驗證。

<authentication mode="Forms">
<forms loginUrl="login.aspx" name=".aspxlogin"/>
</authentication>

同樣在system.web節點下添加membership節點。


<membership defaultProvider="AspNetSqlMembershipProvider" userIsOnlineTimeWindow="15" hashAlgorithmType="">
<providers>
<clear/>
<add connectionStringName="ConnectionString" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="true" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7" minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression="" name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</membership>
屬性解釋說明:

defaultProvider :提供程序的名稱。默認為 AspNetSqlMembershipProvider。如果你有多個Provider的話,指定一個默認值是明智的做法
userIsOnlineTimeWindow :指定用戶在最近一次活動的日期/時間戳之后被視為聯機的分鐘數。
hashAlgorithmType :用于哈希密碼的算法的標識符,或為空以使用默認哈希算法。connectionStringName :membership數據庫的連接名稱。
enablePasswordRetrieval :指示當前成員資格提供程序是否配置為允許用戶檢索其密碼。
enablePasswordReset :指示當前成員資格提供程序是否配置為允許用戶重置其密碼。
requiresQuestionAndAnswer :指示默認成員資格提供程序是否要求用戶在進行密碼重置和檢索時回答密碼提示問題。
applicationName :應用程序的名稱。
requiresUniqueEmail :指示成員資格提供程序是否配置為要求每個用戶名具有唯一的電子郵件地址。
passwordFormat :指示在成員資格數據存儲區中存儲密碼的格式。值可選Clear、Encrypted 和 Hashed。Clear 密碼以明文形式存儲,這可以提高存儲和檢索密碼的性能,但安全性較差,當數據源安全性受到威脅時此類密碼很容易被讀取。Encrypted 密碼在存儲時進行了加密,可以在比較或檢索密碼時進行解密。此類密碼在存儲和檢索時需要進行額外的處理,但比較安全,在數據源的安全性受到威脅時不容易被獲取。Hashed 密碼在存儲到數據庫時使用單向哈希算法和隨機生成的 salt 值進行哈希處理。在驗證某一密碼時,將用數據庫中的 salt 值對該密碼進行哈希計算以進行驗證。無法檢索哈希密碼。
maxInvalidPasswordAttempts :鎖定成員資格用戶前允許的無效密碼或無效密碼提示問題答案嘗試次數。
minRequiredPasswordLength :密碼所要求的最小長度。
minRequiredNonalphanumericCharacters :有效密碼中必須包含的最少特殊字符數。
passwordAttemptWindow :在鎖定成員資格用戶之前允許的最大無效密碼或無效密碼提示問題答案嘗試次數的分鐘數。這是為了 防止不明來源反復嘗試來猜測成員資格用戶的密碼或密碼提示問題答案的額外措施。
passwordStrengthRegularExpression :計算密碼的正則表達式。

為membership配置web.config后,再配置其角色管理roleManager,也是在system.web下。

<roleManager enabled="true" cacheRolesInCookie="true">
<providers>
<clear/>
<add connectionStringName="ConnectionString" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
屬性解釋說明:
cacheRolesInCookie :指示當前用戶的角色是否已緩存在某個 Cookie 中。
當 CacheRolesInCookie 屬性在配置文件中設置為 true 時,每個用戶的角色信息就會存儲在客戶端上的某個 Cookie 中。當角色管理檢查確定某個用戶是否屬于某個特定角色時,在調用角色提供程序在數據源中檢查角色列表之前,將先檢查角色 Cookie。該 Cookie 在客戶端上會動態更新以緩存最近已驗證的角色名稱。
web.config就配置差不多了。

真正步入正題。

4.創建用戶CreateUserWizard控件

在vs2005中創建一個aspx頁面,取名CreateUserWizard.aspx。直接從toolbox中拖入一個 CreateUserWizard控件,設置一下FinishDestinationPageUrl屬性,該屬性指示用戶創建完成后,用戶點擊“繼續”后定向的頁面。

<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" ContinueDestinationPageUrl="~/Default.aspx">
</asp:CreateUserWizard>

現在不做任何設置,在vs2005的中design視圖中可以看到



測試一下先!



提交,出現下面結果:



所以,正確設置membership后,注冊用戶就立馬可以使用了。這是CreateUserWizard的默認模板,你也可以自己創建你需要的模板,vs2005可以幫你轉換出來。你可以修改一下,轉換后就是這樣。

<asp:RequiredFieldValidator ID="EmailRequired" runat="server" ControlToValidate="Email"
                                ErrorMessage="必須填寫“電子郵件”。" ToolTip="必須填寫“電子郵件”。" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
                        </td>
                    </tr>
                    <tr>
                        <td align="right">
                            <asp:Label ID="QuestionLabel" runat="server" AssociatedControlID="Question">安全提示問題:</asp:Label></td>
                        <td>
                            <asp:TextBox ID="Question" runat="server"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="QuestionRequired" runat="server" ControlToValidate="Question"
                                ErrorMessage="必須填寫“安全提示問題”。" ToolTip="必須填寫“安全提示問題”。" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
                        </td>
                    </tr>
                    <tr>
                        <td align="right">
                            <asp:Label ID="AnswerLabel" runat="server" AssociatedControlID="Answer">安全答案:</asp:Label></td>
                        <td>
                            <asp:TextBox ID="Answer" runat="server"></asp:TextBox>
                            <asp:RequiredFieldValidator ID="AnswerRequired" runat="server" ControlToValidate="Answer"
                                ErrorMessage="必須填寫“安全答案”。" ToolTip="必須填寫“安全答案”。" ValidationGroup="CreateUserWizard1">*</asp:RequiredFieldValidator>
                        </td>
                    </tr>
                    <tr>
                        <td align="center" colspan="2">
                            <asp:CompareValidator ID="PasswordCompare" runat="server" ControlToCompare="Password"
                                ControlToValidate="ConfirmPassword" Display="Dynamic" ErrorMessage="“密碼”和“確認密碼”必須匹配。"
                                ValidationGroup="CreateUserWizard1"></asp:CompareValidator>
                        </td>
                    </tr>
                    <tr>
                        <td align="center" colspan="2" style="color: red">
                            <asp:Literal ID="ErrorMessage" runat="server" EnableViewState="False"></asp:Literal>
                        </td>
                    </tr>
                </table>
            </ContentTemplate>
            <CustomNavigationTemplate>
                <table border="0" cellspacing="5" style="width: 100%; height: 100%;">
                    <tr align="right">
                        <td align="right" colspan="0">
                            <asp:Button ID="StepNextButton" runat="server" CommandName="MoveNext" Text="創建用戶"
                                ValidationGroup="CreateUserWizard1" />
                        </td>
                    </tr>
                </table>
            </CustomNavigationTemplate>
        </asp:CreateUserWizardStep>
        <asp:CompleteWizardStep runat="server">
            <ContentTemplate>
                <table border="0">
                    <tr>
                        <td align="center" colspan="2">
                            完成</td>
                    </tr>
                    <tr>
                        <td>
                            已成功創建您的帳戶。</td>
                    </tr>
                    <tr>
                        <td align="right" colspan="2">
                            <asp:Button ID="ContinueButton" runat="server" CausesValidation="False" CommandName="Continue"
                                Text="繼續" ValidationGroup="CreateUserWizard1" />
                        </td>
                    </tr>
                </table>
            </ContentTemplate>
        </asp:CompleteWizardStep>
    </WizardSteps>
    <StartNavigationTemplate>
        <asp:Button ID="StartNextButton" runat="server" CommandName="MoveNext" Text="下一步" />
    </StartNavigationTemplate>
    <FinishNavigationTemplate>
        <asp:Button ID="FinishPreviousButton" runat="server" CausesValidation="False" CommandName="MovePrevious"
            Text="上一步" />
        <asp:Button ID="FinishButton" runat="server" CommandName="MoveComplete" Text="完成" />
    </FinishNavigationTemplate>
    <StepNavigationTemplate>
        <asp:Button ID="StepPreviousButton" runat="server" CausesValidation="False" CommandName="MovePrevious"
            Text="上一步" />
        <asp:Button ID="StepNextButton" runat="server" CommandName="MoveNext" Text="下一步" />
    </StepNavigationTemplate>
</asp:CreateUserWizard>

5.用戶登錄login控件

CreateUserWizard 可以直接拖出來用,login 控件也是一樣。在頁面中放入一個login,代碼很簡單。

<asp:Login ID="Login1" runat="server" DestinationPageUrl="~/admin/Default.aspx" PasswordRecoveryText="找回密碼" PasswordRecoveryUrl="PasswordRecovery.aspx">
</asp:Login>

屬性解釋:
DestinationPageUrl:設置在登錄嘗試成功時向用戶顯示的頁面的 URL。
PasswordRecoveryText:設置密碼恢復頁鏈接的文本。
PasswordRecoveryUrl:設置密碼恢復頁的 URL。 如果用戶忘記密碼,可以點擊這個鏈接點找回他的密碼。

同樣,你也可以自寫模板。

<asp:Login ID="Login1" runat="server" DestinationPageUrl="~/admin/Default.aspx" PasswordRecoveryText="找回密碼" PasswordRecoveryUrl="PasswordRecovery.aspx">
    <LayoutTemplate>
        <table border="0" cellpadding="1" cellspacing="0" style="border-collapse: collapse">
            <tr>
                <td>
                    <table border="0" cellpadding="0">
                        <tr>
                            <td align="center" colspan="2">
                                登錄</td>
                        </tr>
                        <tr>
                            <td align="right">
                                <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName">用戶名:</asp:Label></td>
                            <td>
                                <asp:TextBox ID="UserName" runat="server"></asp:TextBox>
                                <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"
                                    ErrorMessage="必須填寫“用戶名”。" ToolTip="必須填寫“用戶名”。" ValidationGroup="Login1">*</asp:RequiredFieldValidator>
                            </td>
                        </tr>
                        <tr>
                            <td align="right">
                                <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password">密碼:</asp:Label></td>
                            <td>
                                <asp:TextBox ID="Password" runat="server" TextMode="Password"></asp:TextBox>
                                <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password"
                                    ErrorMessage="必須填寫“密碼”。" ToolTip="必須填寫“密碼”。" ValidationGroup="Login1">*</asp:RequiredFieldValidator>
                            </td>
                        </tr>
                        <tr>
                            <td colspan="2">
                                <asp:CheckBox ID="RememberMe" runat="server" Text="下次記住我。" />
                            </td>
                        </tr>
                        <tr>
                            <td align="center" colspan="2" style="color: red">
                                <asp:Literal ID="FailureText" runat="server" EnableViewState="False"></asp:Literal>
                            </td>
                        </tr>
                        <tr>
                            <td align="right" colspan="2">
                                <asp:Button ID="LoginButton" runat="server" CommandName="Login" Text="登錄" ValidationGroup="Login1" />
                            </td>
                        </tr>
                        <tr>
                            <td colspan="2">
                                <asp:HyperLink ID="PasswordRecoveryLink" runat="server" NavigateUrl="PasswordRecovery.aspx">找回密碼</asp:HyperLink>
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </LayoutTemplate>
</asp:Login>


這次先不忙測試。等一下后面的控件!

6.顯示當前用戶的名稱LoginName控件

這個控件很簡單,就是用來呈現用戶名的。

<asp:LoginName ID="LoginName1" runat="server" FormatString="您好,{0},您目前的身份是:注冊用戶" />
如果當前登錄的是blueidea,那么顯示的就是“您好,blueidea,您目前的身份是:注冊用戶”。

7.檢測用戶的身份驗證狀態的LoginStatus控件

可以說是最簡單的控件了。

<asp:LoginStatus ID="LoginStatus1" runat="server" />
它包含兩種狀態:1)已登錄到網站。2)已從網站注銷。
當用戶注銷后,會給出一個“登錄”的鏈接,用戶可以點擊這個鏈接來登錄;當用戶登錄后,這個控件會自動轉變為“注銷”狀態。

8.為不同類別用戶呈現不同內容的LoginView控件

全部登錄控件都可以直接拿來用,不過,這一個我們來做更多一些東西。

<asp:LoginView ID="LoginView1" runat="server">
                <LoggedInTemplate>
                    <asp:LoginName ID="LoginName1" runat="server" FormatString="您好,{0},您已經登錄了。" />
                </LoggedInTemplate>
                <AnonymousTemplate>
                    <asp:Label ID="Label2" runat="server" Text="您尚未登錄,請"></asp:Label><asp:LoginStatus
                        ID="LoginStatus1" runat="server" />
                </AnonymousTemplate>
                <RoleGroups>
                    <asp:RoleGroup Roles="admin">
                        <ContentTemplate>
                            <asp:LoginName ID="LoginName1" runat="server" FormatString="您好,{0},您目前的身份是:管理員" />
                            <br />
                            您可以訪問:<asp:HyperLink ID="HyperLink1" NavigateUrl="User/Default.aspx" runat="server">User/Default.aspx</asp:HyperLink>
                            <br />
                            您也可以訪問:<asp:HyperLink ID="HyperLink2" NavigateUrl="Admin/Default.aspx" runat="server">Admin/Default.aspx</asp:HyperLink>
                            <br />
                            <asp:LoginStatus ID="LoginStatus3" runat="server" />
                        </ContentTemplate>
                    </asp:RoleGroup>
                    <asp:RoleGroup Roles="member">
                        <ContentTemplate>
                            <asp:LoginName ID="LoginName1" runat="server" FormatString="您好,{0},您目前的身份是:注冊用戶" />
                            <br />
                            您可以訪問<asp:HyperLink ID="HyperLink1" NavigateUrl="User/Default.aspx" runat="server">User/Default.aspx</asp:HyperLink>
                            <br />
                            您不能訪問<asp:HyperLink ID="HyperLink2" NavigateUrl="Admin/Default.aspx" runat="server">Admin/Default.aspx</asp:HyperLink>
                            <br />
                            <asp:LoginStatus ID="LoginStatus2" runat="server" />
                        </ContentTemplate>
                    </asp:RoleGroup>
                </RoleGroups>
            </asp:LoginView>

可以看到,這里包含了三個模板:LoggedInTemplate、AnonymousTemplate和RoleGroup的模板。如果定義了 LoggedInTemplate模板,那么該用戶會看到該模板內的內容,除非該用戶屬于另一個角色組,且該角色組在已在RoleGroups的模板中的定義。當匿名用戶訪問站點時,AnonymousTemplate內的內容會呈現給該用戶。在前面我們配置的web.config中啟用了角色,我們現在為admin角色定義一個模板,你可以在上面的代碼中找到。

到現在,我們就可以測試一下效果了。



可以看到,我們還沒有登錄,AnonymousTemplate的內容呈現在我們的面前。而且其中的LoginStatus顯示的狀態是“登錄”狀態。我們登錄一下,前面注冊了一個用戶,登錄一下。



LoggedInTemplate沒有起作用,而是member的角色模板起作用,這是因為,其實我們在CreateUserWizard做了設置,新用戶注冊以后直接納入member角色組了。在CreateUserWizard的CreatedUser事件中添加一句簡單的話:

protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
Roles.AddUserToRole(CreateUserWizard1.UserName, "member");
}

再來解釋一下上面的的“你可以訪問……”是什么意思。在此之前我其實已經添加了兩個角色:member和admin。角色添加方法很簡單:在vs2005 中選擇 網站->ASP.NET配置->安全->創建或管理角色。跟上面的的配合,我們添加一個角色叫“admin”。



再選擇“創建訪問規則”來創建訪問規則。給admin文件創建下面規則,如圖示:



拒絕member組和匿名用戶,只允許admin組的用戶訪問admin文件夾。給user文件夾創建如下訪問規則。



拒絕匿名用戶,允許member組和admin組的用戶。

當新注冊用戶登錄后,它們可以訪問到user文件夾下的文件



但是,如果訪問admin文件夾時則會被定向到登錄頁。




9.更改密碼的ChangePassword控件

如果更改密碼,就使用它來修改。

<asp:ChangePassword ID="ChangePassword1" runat="server">
</asp:ChangePassword>
不需要設置,就可以修改密碼了。



10.自助找回密碼的PasswordRecovery控件

忘了密碼怎么辦,可以自已找回啦!不過,在些之前,web.config得另有配置。在system.web中的同級節點創建system.net節點,具體內容如下:

<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="*@126.com">
<network defaultCredentials="false" host="smtp.126.com" password="*" port="25" userName="*@126.com" />
</smtp>
</mailSettings>
</system.net>
我們使用了126的郵箱,其中的用戶名與密碼被省略。創建PasswordRecovery.aspx,放入PasswordRecovery控件。

<asp:PasswordRecovery ID="PasswordRecovery1" runat="server">
</asp:PasswordRecovery>

測試:




打開注冊時填寫的郵箱就可以看到了。



我們就可以使用新的密碼來登錄站點了。

11.總結

membership在接觸之前,覺得比較神秘,在接觸之后,發現其實也不難懂,而且與login系列控件配合得很完美。如果你想要快速搭建一個用戶管理的平臺,這是一個不錯的選擇,是偷懶者的首選。

如果你嫌MS的控件太難看,也沒有關系,因為它又有多種多樣的模板,通過自定義模板你就能實現你要看的界面。

不過,membership是設計得適合大多數的情況,所以也是一種萬金油的做法,與你要的功能可能不完全符合,不過,學習一下它的做法,學習它數據庫的設計,不也是一個好東西嗎? 
上一篇:[C#] DataView用法

下一篇:asp調用js代碼

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品在线国产| 国产精品欧美久久久| 8090成年在线看片午夜| 51视频国产精品一区二区| 欧美日韩不卡合集视频| 97久久精品在线| 亚洲视频欧美视频| 成人精品一区二区三区| 欧美区二区三区| 亚洲精品美女免费| 亚洲国产天堂久久综合| 日韩亚洲国产中文字幕| 国产91精品久久久久久| 国产精品视频99| 日韩高清有码在线| 国产日韩欧美中文| 久久男人的天堂| 97免费视频在线播放| 国产精品极品美女粉嫩高清在线| 午夜精品一区二区三区在线播放| 亚洲国产精彩中文乱码av在线播放| 91夜夜揉人人捏人人添红杏| 欧美黄色片在线观看| 裸体女人亚洲精品一区| 欧美激情视频网| 555www成人网| 国产日产欧美精品| 欧美成人免费播放| 国产精品偷伦一区二区| 亚洲va电影大全| 最近的2019中文字幕免费一页| 欧美精品在线播放| 亚洲电影免费观看高清完整版在线| 欧美成人精品xxx| 日韩中文综合网| 国产精品中文字幕在线观看| 亚洲天堂av高清| 久久久亚洲国产| 91在线无精精品一区二区| 日韩精品免费在线视频| 国产精品激情自拍| 久久69精品久久久久久久电影好| 国产福利视频一区| 精品人伦一区二区三区蜜桃免费| 亚洲色图五月天| 91产国在线观看动作片喷水| 国产精品视频26uuu| 亚洲国产精品福利| 久久久久久999| 亚洲精品成a人在线观看| 亚洲国产精品成人av| 国产欧美日韩专区发布| 69久久夜色精品国产7777| 国产精品免费久久久久影院| 日韩在线观看av| 国模吧一区二区| 欧美国产精品日韩| 欧美一区二区视频97| 欧美精品免费在线观看| 91中文字幕在线观看| 国产精品免费看久久久香蕉| 国产91精品不卡视频| 亚洲sss综合天堂久久| 精品国产一区二区三区四区在线观看| 韩国v欧美v日本v亚洲| 国产丝袜视频一区| 日本成人精品在线| 国产精品爽爽ⅴa在线观看| 日韩av色综合| 中文字幕v亚洲ⅴv天堂| www.欧美精品| 69久久夜色精品国产7777| 中文字幕亚洲一区二区三区| 亚洲第一区在线| 欧美成人激情视频免费观看| 欧美午夜视频在线观看| 国产精品www色诱视频| 日韩精品在线看| 久久99久久99精品免观看粉嫩| 精品国产欧美一区二区三区成人| 久久久精品国产网站| 久久色在线播放| 国产深夜精品福利| 国产有码在线一区二区视频| www.日本久久久久com.| 久久久99久久精品女同性| 国产精品久久久久99| www亚洲欧美| 久久久www成人免费精品张筱雨| 久久久精品一区| 日韩美女免费观看| 中文字幕日韩精品有码视频| 日韩毛片中文字幕| 亚洲欧洲午夜一线一品| 国产成人久久久精品一区| 97在线免费观看| 国产精品久久久久久久久久免费| 国产亚洲视频在线观看| 欧美尺度大的性做爰视频| 在线视频欧美性高潮| 另类色图亚洲色图| 欧美一区二区影院| 久热精品视频在线观看一区| 深夜福利一区二区| 亚洲国产天堂久久国产91| 久久伊人色综合| 亚洲国语精品自产拍在线观看| 欧美一区二区三区四区在线| 国产精品久久久久av免费| 亚洲aⅴ日韩av电影在线观看| 1769国内精品视频在线播放| 亚洲成人网在线观看| 久久久久久国产精品| 亚洲国产欧美一区二区丝袜黑人| 国产精品一区二区三| 精品欧美一区二区三区| 欧美视频13p| 日本精品视频网站| 久久精品亚洲94久久精品| 亚洲精品一区二区三区婷婷月| 在线免费观看羞羞视频一区二区| 久久亚洲一区二区三区四区五区高| 亚洲成色777777女色窝| 91久久国产精品| 伊人激情综合网| 亚洲激情视频网站| 亚洲欧美在线一区| 91久久精品国产91性色| 色老头一区二区三区在线观看| 国产精品久久久久不卡| 亚洲一级黄色av| 亚洲国产91精品在线观看| 国产精品扒开腿做爽爽爽的视频| 欧美性受xxxx白人性爽| 成人国产精品免费视频| 97精品伊人久久久大香线蕉| 久久久视频在线| 亚洲黄色av女优在线观看| 日韩一区二区久久久| 中文.日本.精品| 色在人av网站天堂精品| 91在线观看免费高清| …久久精品99久久香蕉国产| 中文字幕在线看视频国产欧美| 午夜精品久久久久久久久久久久久| 国产成人精品视频在线观看| 国产成人精品视频| 亚洲影视中文字幕| 92版电视剧仙鹤神针在线观看| 俺去亚洲欧洲欧美日韩| 亚洲一区二区三区四区在线播放| 亚洲一区二区自拍| 日韩美女在线观看| 欧美日韩国产91| 欧美特级www| 国产精品永久在线| 国产精品一区二区三区久久| 亚洲品质视频自拍网| 亚洲香蕉成视频在线观看| 国产精品高清在线观看| 另类美女黄大片| 欧美激情视频三区| 国产精品1区2区在线观看| 日韩精品在线视频观看|