PDA

View Full Version : سوال: Remember Me روی هاست کار می کنه ولی روی سرور کار نمی کنه. چرا؟



mehdi99
یک شنبه 11 تیر 1391, 20:40 عصر
سلام دوستان.
روی Local Host کاربران لازم نیست هر بار لاگین کنند و برنامه درست کار می کند. ولی روسرور هر 30 دقیقه باید دوباره لاگین کرد.
به نظر شما مشکل کجاست. فقط روی سرور این مشکل هست.
Server: ASP.Net 4.0 -IIS 7.0
کد روی Web.config:

<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx"
protection="All"
timeout="2880"
name="FormMyShift"
path="/"
requireSSL="false"
slidingExpiration="true"
defaultUrl="default.aspx"
cookieless="UseCookies"
enableCrossAppRedirects="false"
/>
</authentication>

این هم کد Remember Me در #C
if (CheckBox1.Checked)
{
//mylogin();
FormsAuthentication.Initialize();
DateTime expires = DateTime.Now.AddYears(1);
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
txtUserName.Text,
DateTime.Now,
expires, // value of time out property
true, // Value of IsPersistent property
String.Empty,
FormsAuthentication.FormsCookiePath);

// Encrypt the ticket.
string encryptedTicket = FormsAuthentication.Encrypt(ticket);

// Create the cookie.
HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
authCookie.Expires = expires;
Response.Cookies.Add(authCookie);


string returnUrl = FormsAuthentication.GetRedirectUrl(txtUserName.Tex t , true);
if (string.IsNullOrEmpty(returnUrl))
returnUrl = "~/Default.aspx";
Response.Redirect(returnUrl);
}

aminghaderi
دوشنبه 12 تیر 1391, 07:40 صبح
فکر کنم از کد Machine Key باشه ؟! اگر از این کد استفاده نکردید ، این قطعه زیر را در Web.config قرار بدید.
یه تست بگیرید ، اگر جواب گرفتی بگو تا برات توضیح بدم این چی هست و کاربردش کجاست.
فقط سرجاش در وب کانفیگ قرار بدید تا درست کار کند ، بین <system.web> و</system.web> .

<system.web>

<machineKey validationKey="44E376557A5D98EF57E14F9F7225EE98C8D1F120A2FCC00896 5A32848717957BF44C1138060154A40709103C1229464A05CB F67A644BA938D66401C523390F51"
decryptionKey="F6388BB8D1152707FC29E8F2E403C5CF1A16F38A4ABE947156 8F15A2D4352B61" validation="SHA1" decryption="AES" />
</system.web>

mehdi99
دوشنبه 12 تیر 1391, 20:08 عصر
سلام امین جان
مرسی از جوابت.
من توی Web.config اینو دارم.

<machineKey
validationKey="AutoGenerate,IsolateApps"
decryptionKey="AutoGenerate,IsolateApps"
validation="AES"
decryption="Auto" />

ولی باز هم بعد از 30 دقیقه دوباره باید Login کرد. کد شما رو هم امتحان می کنم ببینم چی میشه. خبر شو می دهم همین جا.

آخه مشکل اینجاست که روی Localhost درست است.
ممنون می شم جواب بدی بد جوری گیر این هستم.

mehdi99
دوشنبه 12 تیر 1391, 20:19 عصر
امین جان Machine Key شما رو امتحان کردم
Internal Server Error 500

این Error رو می ده. اصلا وب سایت بالا نمی یاد. ولی Machine Key خودمو می زارم . کار می کنه.

لطفا اگه کسی می دونه کمک کنه؟

aminghaderi
دوشنبه 12 تیر 1391, 22:36 عصر
سلام عزیزم ، خواهش می کنم .
خطای :

Internal Server Error 500معمولا به وجود خطا در وب کانفیک دلالت داره ، یه بار دیگر چک کنید ببنید جایی رو المنتی یا موردی رو اشتباهی وارد نکردید و سنتکس وبکانفیک سالمه؟!
ضمن اینکه حتمی وقتی از Machine Key در پاسخ من استفاده کردید اون تگ مربوط به Machine Key خودتون رو پاک کنید تا اختلال در عملکرد به وجود نیاد.
باز هم چک کنید ، اگر رفع نشد ، باید تنظیمات iis که مربوط به session time out هست بررسی بشه. (اگر مسلط نیستید بهتره از پشتیبان وب کمک بگیرید.).

اگر این هم نبود باید به طور اساسی تر بررسی کرد.

mehdi99
دوشنبه 12 تیر 1391, 23:40 عصر
ممنون که گفتی عوض کند ولی عوض کردن Machine Key نمی ده.
اون Error 500 رو دقیقا وقتی میده که Machine key خودمو با ماله شما عوض می کنم.
راستی من این کد رو توی Web.Config ندارم.
<sessionState mode="StateServer" timeout="262974" cookieless="UseCookies" />

ربطی به این نداره؟
ولی چرا روی LocalHost درست است؟

mehdi99
سه شنبه 13 تیر 1391, 00:03 صبح
امین جان ببین این کل 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>

<add name="MembershipConnectionString" ....../>
</connectionStrings>


<system.net>
<mailSettings>
<smtp deliveryMethod="Network" from="Email">
<network
host="smtp"
userName="email"
password=""
port="80"
/>

</smtp>
</mailSettings>
</system.net>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<customErrors mode="Off" defaultRedirect="~/ErrorPage.aspx">
<error statusCode="404" redirect="~/PageNotFound.aspx"/>
</customErrors>
<authentication mode="Forms">
<forms protection="All" loginUrl="~/Account/Login.aspx" timeout="2880" slidingExpiration="true" name="FormMyShift" />
</authentication>

<pages maintainScrollPositionOnPostBack="true" ></pages>
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="MembershipConnectionString"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="false"
maxInvalidPasswordAttempts="10"
minRequiredPasswordLength="6"
minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"
applicationName="AppMyshift" />
</providers>
</membership>

<profile enabled="true" defaultProvider="AspNetSqlProfileProvider">
<providers>
<clear/>
<add name="AspNetSqlProfileProvider"
type="System.Web.Profile.SqlProfileProvider"
connectionStringName="MembershipConnectionString"
applicationName="AppMyshift"/>
</providers>
<properties>
<clear/>
<add name="FirstName" type="System.String"/>
<add name="LastName" type="System.String"/>
<add name="DateofBirth" type="System.String" defaultValue="0/0/0"/>
<add name="Gender" type="System.String"/>
<add name="MobilePhone" type="System.String"/>
<add name="Positions" type="System.String"/>
<add name="Country" type="System.String"/>
<add name="City" type="System.String"/>
<add name="Province" type="System.String"/>
<add name="StoreLocation" type="System.String"/>
<add name="StartDate" type="System.String" defaultValue="0/0"/>
</properties>
</profile>

<roleManager enabled="false">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="MembershipConnectionString" applicationName="AppMyshift" />
<add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="AppMyshift" />
</providers>
</roleManager>

<machineKey
validationKey="AutoGenerate,IsolateApps"
decryptionKey="AutoGenerate,IsolateApps"
validation="AES"
decryption="Auto" />

</system.web>

<system.webServer>
<httpErrors errorMode="DetailedLocalOnly" defaultPath="/ErrorPage.aspx" defaultResponseMode="ExecuteURL">
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/PageNotFound.aspx" responseMode="ExecuteURL" />
</httpErrors>

<modules runAllManagedModulesForAllRequests="true"/>
<rewrite>
<rules>

<rule name="Redirect domain.com to www" patternSyntax="ECMAScript" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern="^mysite.com$" />
</conditions>
<action type="Redirect" url="http://www.mysite.com/{R:0}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

aminghaderi
سه شنبه 13 تیر 1391, 05:53 صبح
ولی چرا روی LocalHost درست است؟ فکر کنم ، چون دسترسی اون به صورت remote هست ، خیلی از موارد خودش رو فقط در سرور نشون می دهد.
ایرادی از کد ها نمی بینم ، ولی چرا به کلید ثابت گیر می دهد ، دلیل و منطقش رو نمی فهمم .
اون موارد بعدی رو فکر کنم باید دنبالش باشید :

اگر رفع نشد ، باید تنظیمات iis که مربوط به session time out هست بررسی بشه. (اگر مسلط نیستید بهتره از پشتیبان وب کمک بگیرید.).
اینشاالله که درست می شه ، اگر نشد ، I don't Know ...:اشتباه:

mehdi99
سه شنبه 13 تیر 1391, 16:26 عصر
سلام
هنوز که پیداش نکردم چرا این کار نمی کنه. ولی توی Browser چک کردم . کوکی رو درست می کنه. ولی از کوکی نمی خونه برای Login کردن.
و جالب اینه که به محض اینکه Machine Key تو رو می زارم Error 500 می ده.
اگه از دوستان همچین مشکلی داشته قبلا لطفا کمک کنه.

یک سوال دیگه وقتی که آدرس یک صفحه رو می زنی که وجود ندارد مثل www.domainName.com/products.aspx (http://www.domainName.com/products.aspx) صفحه PageNotFound.aspx رو می یاره. ولی اگه www.domainName.com/products (http://www.domainName.com/products) (بدون aspx) نمی توی ضفحه .PageNotFound.aspx می دونی چرا؟

aminghaderi
سه شنبه 13 تیر 1391, 21:14 عصر
هندلر خطا به صورت پیش فرض برای صفحات فعال هست ، در اون صورت فکر می کنه ، شما دارید به یه پوشه اشاره می کنید .
البته این مورد فقط بروی لوکال هست ، سمت سرور Access Denied می دهد .

mehdi99
چهارشنبه 14 تیر 1391, 04:19 صبح
خوب چه جوری می تونم هر چی آدرس که وجود ندارد به صفحه PageNotFound.aspx بره؟
حتی آنهایی که aspx. ندارد. مثل : www.domainName.com/products (http://www.domainName.com/products)
<httpErrors> داره می کار نمی کنه. توی Web.config پست شماره 7 می توی ببینی که هست.