Используйте HttpModule и Session authenticate, но img src вызывает Session null - PullRequest
0 голосов
/ 15 октября 2018

Я нахожу способ выполнить аутентификацию с помощью IHttpModule и Session,

context_PreRequestHandlerExecute будет перехватывать все запросы раньше, чем действия в контроллере:

1. add AuthenticModule class

public class AuthenticModule : IHttpModule
{
    public void Dispose()
    {
    }

    public void Init(HttpApplication context)
    {
        context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
    }     

    void context_PreRequestHandlerExecute(object sender, EventArgs e)
    {
        HttpApplication ha = (HttpApplication)sender;
        string path = ha.Context.Request.Url.ToString();
        int n = path.ToLower().IndexOf("login");
        if (n == -1 ) //if not login page 
        {
            //if user not login (doesn't have session)
            if(HttpContext.Current.Session["user"] == null) 
            {   //redirect to Login page
                ha.Context.Response.Redirect("~/Home/Login");
            }
        }
    }
} 

2. add AuthenticModule to web.config

<system.webServer>
 <modules>
  <add name="AuthenticModule" type="NAMESPACE.AuthenticModule, ASSEMBLY_NAME"></add>
 </modules>
</system.webServer>

но у меня проблема в том, что у меня есть /Home/Login и Home/Index страницы в HomeController и html Home/Index Page contians <img src="/IMG/tree.jpg" />:

public class HomeController : Controller
{
    public ActionResult Login()
    {
        Session["user"] = "user";
        return Content("Logining");
    }
    public ActionResult Index()
    {
        return View();
    }
}

and Home/Index Page contians <img src="/IMG/tree.jpg" />

Тогда,

Сначала перейдите на URL /Home/Login, затем он перейдет в context_PreRequestHandlerExecute, и поскольку URL содержит «логин», поэтому он просто пройдет и перейдет в действие Login(), это 'Я установлю Сеанс, что означает простоту входа в систему здесь просто.

И моя проблема в том, что, если я затем запускаю /Home/Index, <img src="/IMG/tree.jpg" /> также отправит запрос в context_PreRequestHandlerExecute, и я нашел его HttpContext.Current.Session равен NULL и вызывает Session["user"] исключение нулевой ссылки

, поэтому этот способ аутентификации не будет работать, пока любая страница содержит img src ссылку на собственный образ сервера.

Есть ли здесь что-то, что можно улучшить, чтобы этот способ аутентификации IHttpModule работал нормально, даже если страница содержит img src ссылкуДоступ к самоизображению сервера?или это тупик?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...