Я решил зарегистрировать представление в ServiceProvider моего пакета.
Указывает, что этот пакет предоставляет некоторые представления в каталоге / resources / views, и к этим представлениям можно обратиться, используя имя поставщика пакета php-responsive-quote
.
public function boot(){
...
$this->loadViewsFrom(__DIR__ . '/../resources/views', 'php-responsive-quote');
...
}
И затем в представлении, вызывая директивы @extends
и @include
таким образом.
@extends('laravel-responsive-gallery::layout')
@include('laravel-responsive-gallery::partials.input', [
'title' => 'Image file name',
'name' => 'file_name',
'placeholder' => '',
])
Наконец-то я разгадал последний кусок головоломки. Когда пул приложений моего сервера перерабатывался (настраивался хостинг-провайдером), ключ шифрования состояния просмотра автоматически перегенерировался. Это означало, что даже несмотря на то, что куки были действительными и не просроченными (предварительное посещение), когда пользователь вернул шифрование, было изменено, и куки больше не действовали.
Решением было вручную указать статический ключ проверки. Следующая ссылка может использоваться для создания необходимого тега web.config для этого.
http://www.aspnetresources.com/tools/keycreator.aspx
ОБНОВЛЕНИЕ:
Вот более настраиваемый сайт для создания Машинный ключ
Исходное дерево - атрибут генерации
Я понимаю, что это может иметь незначительное влияние на безопасность, теоретически полагаю ' Безопаснее иметь изменяемый ключ на случай, если ваш ключ будет подвергнут грубому принуждению и поставит под угрозу любые данные, которые вы можете хранить в состоянии просмотра, но вам, вероятно, не следует хранить конфиденциальную информацию в состоянии просмотра, поскольку это в любом случае небезопасно по своей сути.
Пример:
<configuration>
<system.web>
<machineKey
validationKey="97CEB2D3DEBF853649EAB851F56F08BA328423F935C97244CF5300925B6FF7D2C43084C73CBAF19D5193755EF7F87A3FFC714675F9197C822BAEEC97E853B91E"
decryptionKey="A72F69A4650348E3AA249A8179516D67C8553B3D4BD165B9"
validation="SHA1" />
</system.web>
</configuration>
Я думаю, что Вы были бы богатым использованием FormsAuthentication.SetAuthCookie
метод вместо того, чтобы написать много кода самостоятельно.
Я полагаю, что Ваши настройки поставщика членства в web.config могут конфликтовать с настройками, которые Вы обеспечиваете в коде, плюс Вы не обеспечиваете имя cookie.
Попробуйте следующее:
if (Membership.ValidateUser(userName, password))
{
FormsAuthentication.SetAuthCookie(userName, true); //Creates a cookie named "XXXAuth" - see settings in web.config below
}
В сочетании со следующими настройками в web.config:
<authentication mode="Forms">
<forms cookieless="UseCookies" loginUrl="~/SignIn.aspx" name="XXXAuth" slidingExpiration="true" timeout="432000"/>
</authentication>
<membership defaultProvider="XXXMembershipProvider">
<providers>
<clear />
<add name="XXXMembershipProvider" type="System.Web.Security.SqlMembershipProvider" applicationName="XXX" connectionStringName="XXX" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" minRequiredPasswordLength="5" minRequiredNonalphanumericCharacters="0" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
</providers>
</membership>
Просто измените значение "тайм-аута" в блоке аутентификации, чтобы быть более длинным значением, если Вы действительно хотите создать неопределенный период входа в систему. Я верю 432000 = 5 дней.
Если Вы хотите, чтобы Ваши пользователи смогли явно выйти из системы, просто назовите следующий метод в ответ на нажатие кнопки (или безотносительно):
FormsAuthentication.SignOut();
Надеюсь, это поможет.
При чтении кода Вы, возможно, случайно обнулили значение тайм-аута FormsAuthenticationTicket. Строка в Вашем коде, где Вы создаете чтения билета: -
Dim authTicket As FormsAuthenticationTicket = New FormsAuthenticationTicket(Username, True, Expiration.Subtract(Expiration).TotalMinutes)
Значение Expiration.Subtract(Expiration).TotalMinutes
всегда будет "0".
Можно лучше использовать рукописный формат для создания тикета следующим образом, который привел бы к меньшей неоднозначности.
Public Shared Sub AuthenticateUser(ByVal Username As String)
Dim Expiration As DateTime = DateTime.Now.AddMonths(3)
Dim userData As String = String.Empty
Dim authTicket As FormsAuthenticationTicket = _
New FormsAuthenticationTicket( _
Username, _
DateTime.Now, _
Expiration, _
true, _
userData, _
FormsAuthentication.FormsCookiePath)
Dim EncryptedTicket As String = FormsAuthentication.Encrypt(authTicket)
Dim AuthCookie As New HttpCookie(FormsAuthentication.FormsCookieName, EncryptedTicket)
AuthCookie.Expires = Expiration
HttpContext.Current.Response.Cookies.Add(AuthCookie)
End Sub
Существует также хорошая статья Microsoft KB здесь о "Понимании Билета Аутентификации Форм и Cookie"
.