Любые предложения о том, как сделать сессионную проверку сайта? - PullRequest
1 голос
/ 27 марта 2009

Это может быть очень странный вопрос, но некоторые советы или рекомендации будут очень полезны. Мы хотим «проверить сеанс» нашего веб-сайта, в основном, убедиться, что два разных сеанса генерируют одинаковую структуру ссылок (например, и пользователь-a, и пользователь-b получат одинаковые ссылки на одной и той же веб-странице).

Причиной этого теста является то, что наш веб-сайт создается с помощью решения для управления контентом, которое будет генерировать разные ссылки (URL) для каждого отдельного сеанса. Эта CMS (которая построена внутри) была исправлена ​​для возврата одинаковых ссылок между сеансами.

Другая ситуация с проверкой сеансов заключается в том, что наш механизм кэширования (SQUID) все время предоставляет TCP_MISSes нашему веб-сайту, что заставляет нас думать, что весь сайт помечен как динамический, а сервер кэширования необходимость постоянно отбирать все объекты.

Ответы [ 6 ]

0 голосов
/ 21 июня 2009

Вы можете попробовать использовать набор нагрузочных тестов, например Pureload , чтобы имитировать попадание нескольких пользователей на ваш сайт. Pureload может иметь несколько одновременно симулированных пользователей, каждый из которых делает один и тот же запрос и подтверждает, что результаты соответствуют ожидаемым. В зависимости от того, насколько динамичны ваши результаты, это может помочь вам проверить вашу ошибку.

0 голосов
/ 13 июня 2009

Почему ваши URL разные? Вы храните в них идентификаторы сеансов?

Если да, то, вероятно, вам следует переместить это в файл cookie!

0 голосов
/ 09 июня 2009

Вы можете написать тест на Java, используя селен. Добавьте утверждения для данных, которые вы ожидаете. Затем вы можете просмотреть список из нескольких входов в систему, чтобы увидеть тестовые проходы для каждого из них.

Селен довольно легко начать, и тесты могут быть написаны на многих языках.

Подробнее см. Здесь:

http://seleniumhq.org/projects/remote-control/

Примером теста будет что-то вроде этого (псевдокод):

public void setUp() throws Exception {
    setUp("http://mywebsite.com", "*chrome"); // to run the test in opera replace chrome with opera
}

public void testLoginWithMultipleUsers() {
    for(loop over users) {
        runLogin(user)
    }
}

public void runLogin(User user) throws Exception {
    selenium.open("/login.htm");
    assertTrue(selenium.isTextPresent("Link1"));
    assertTrue(selenium.isTextPresent("2003-2008"));
    selenium.open("/account");
    assertTrue(selenium.isTextPresent("2003-2008"));
    selenium.waitForPageToLoad("30000");
    etc...

Selenium предоставляет множество методов для проверки наличия ссылок и других элементов страницы, и тест можно даже записать в браузере - попробуйте!

0 голосов
/ 01 апреля 2009

Если на каждой странице вашего сайта есть отдельная ссылка, то кеширование для этого сайта обязательно будет нарушено.

Вы спрашиваете, как проверить, чтобы ссылки были одинаковыми для каждой сессии? Или вы спрашиваете, как обеспечить одинаковые ссылки для каждой сессии?

Для первого достаточно простого просмотра из двух разных браузеров и входа пользователя.

Что касается обеспечения того, чтобы ссылки были одинаковыми для каждого сеанса, хорошо ... Это будет зависеть от вашей реализации, которую вы указали, было внутренней.

0 голосов
/ 28 марта 2009

Это то, что мы делаем на amplafi.com

(ч / т См. http://randomcoder.com/articles/jsessionid-considered-harmful) в web.xml:

<filter>
    <filter-name>DisableSessionIdsInUrlFilter</filter-name>
    <filter-class>
        com.amplafi.web.servlet.DisableSessionIdsInUrlFilter
    </filter-class>
</filter>


<filter-mapping>
    <filter-name>DisableSessionIdsInUrlFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

И этот код Java:

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import javax.servlet.http.HttpSession;

/**
 * remove any session id from the Url.
 *
 *
 * Ideally we would like to only remove this container-provided functionality
 * only for public portions of the web site (that can be crawled by google)
 * or for links that are to be bookmarked.
 *
 * @author Patrick Moore
 */
public class DisableSessionIdsInUrlFilter implements Filter {
    @Override
    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        if (!(request instanceof HttpServletRequest)) {
            chain.doFilter(request, response);
            return;
        }

        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        /*
         * Next, let's invalidate any sessions that are backed by a URL-encoded
         * session id. This prevents an attacker from generating a valid link.
         * Just because we won't be generating session-encoded links doesn't
         * mean someone else won't try
         */
        if (httpRequest.isRequestedSessionIdFromURL()) {
            HttpSession session = httpRequest.getSession();
            if (session != null) {
                session.invalidate();
            }
        }
        HttpServletResponseWrapper wrappedResponse = new ResponseWrapper(httpResponse);
        chain.doFilter(request, wrappedResponse);
    }

    @Override
    @SuppressWarnings("unused")
    public void init(FilterConfig arg0) throws ServletException {
    }

    /**
     * wraps response and prevense jsessionid from being encoded on the output.
     */
    private static class ResponseWrapper extends HttpServletResponseWrapper {

        ResponseWrapper(HttpServletResponse httpResponse) {
            super(httpResponse);
        }
        @Override
        public String encodeRedirectUrl(String uri) {
            return uri;
        }

        @Override
        public String encodeRedirectURL(String uri) {
            return uri;
        }

        @Override
        public String encodeUrl(String uri) {
            return uri;
        }

        @Override
        public String encodeURL(String uri) {
            return uri;
        }
    }
}
0 голосов
/ 27 марта 2009

Вы пытаетесь проверить, действительно ли два разных пользователя видят одну и ту же структуру? Одним из способов было бы использовать что-то вроде wget для сканирования всего веб-сайта с двух разных IP-адресов, а затем сравнить полученные деревья.

...