Aprenda o básico de Cookies

base de conhecimento

Primeiro você tem que entender o que é a sessão, a sessão é um usuário abre um navegador e clicar em vários links, em seguida, terá acesso a vários serviços Web, e em seguida, feche o navegador.
Existem duas técnicas para salvar os dados da sessão, você pode salvar os dados do usuário, tais como seus dados de compras carro. E essas duas tecnologias são tecnologias e técnicas HttpSession Cookie.

Visão geral do bolinho
tecnologia de cliente Cookie, cada usuário vai programar dados dirigida ao navegador do respectivo usuário na forma de um cookie. Quando os usuários usar um navegador da web para acessar os recursos do servidor WEB e eles vão com os seus dados.

O cookie de API
um javax.servlet.http.Cookie um método de classe, para os quais um aumento de um cabeçalho de resposta correspondente Set-Cooki criar um biscoito, interface de resposta define um quadrado addCookie e cabeçalho de campo. Da mesma forma, pedido de interface getCookies também define um método para obtenção de Cookies apresentado pelo cliente. classe método Cookie:
Cookie (String nome, String value) public
o setValue e métodos getValue
SetMaxAge getMaxAge e métodos (segundos)
SetPath getPath e métodos
setDomain e getDomain método
método getName

Exemplo mostra:

* 1 Obtém o cliente hora do último acesso:
// informa o servidor deve usar UTF-8 para analisar o arquivo, diz ao cliente o que codificar usando
response.setContentType ( "text / html; charset = UTF-8");
// get um fluxo de saída de caracteres
o PrintWriter response.getWriter OUT = ();
// obtém a hora do último acesso armazenadas no cliente
do bolinho [] biscoitos = request.getCookies () ; // obter todos os clientes objeto de Cookies
for (int i = 0; biscoitos ! = null && I <cookies.length; i ++) {
if ( "lastAccessTime" .equals (cookies [I] .getName ())) {// cookies é determinado se o nome atual é desejada biscoito
Long Long L = .parseLong (cookies [i] .getValue ( )); // Se você quer um biscoito, biscoito colocar o valor fora
out.write ( "a sua última visita:" + new Date (l) .toLocaleString ()); // o MM-dd-AAAA
}
}
// criar um biscoito,
biscoitos CK = novos novos biscoitos ( "lastAccessTime", System.currentTimeMillis () + "");
// escreve a parte de trás informações do cookie para o cliente
response.addCookie (ck);

Biscoito atributo
name: nome não pode identificar um Cookie. Caminho pode ser diferente.
valor: não pode salvar chinês.
caminho: O padrão é escrever programas que caminho de acesso Cookie

  • Por exemplo: http: // localhost: 8080 / Dia10 / servlet / demo1 gravação de Cookies
  • caminho é: / dia10 / servlet criou o cookie para ver o recurso atual (servlet) caminho de arquivo
  • Além disso, quando os recursos do cliente, de acordo com o caminho de acesso para determinar se o servidor de acesso para o servidor com o bolinho
  • Se o caminho de acesso atual é o caminho do caminho do cookie que começa com um browser. Caso contrário, sem.

maxAge: biscoito tempo cache. O padrão é -1 (a existência navegador padrão de memória). Em questão de segundos.

Negativo: a presença do cache do navegador de dados do bolinho
0: Delete. Para manter o caminho, ou você pode excluir a pessoa errada.
Positivo: Cache (mantidas no disco) Tempo

Demonstração código:

    //告诉服务器应该使用UTF-8来解析文件,告诉客户端使用什么来编码
    response.setContentType("text/html;charset=UTF-8");
    //得到一个字符输出流
    PrintWriter out = response.getWriter();
    //获取客户端保存的最后访问时间
    Cookie[] cookies = request.getCookies();//获取客户端的所有Cookie对象
    for (int i = 0;cookies!=null && i < cookies.length; i++) {
        if("lastAccessTime".equals(cookies[i].getName())){//判断当前Cookie中的name是否是想要的cookie
                long l = Long.parseLong(cookies[i].getValue());//如果是想要的Cookie,则把Cookie中的value取出
                out.write("你的最后访问时间为:"+new Date(l).toLocaleString());//yyyy-MM-dd
                    }
                }
    //创建cookie,
    Cookie ck = new Cookie("lastAccessTime",System.currentTimeMillis()+"");
    //设置cookie的有效时间,单位是秒
    ck.setMaxAge(60*5);//保存时间为5分钟
    //设置cookie的path
    ck.setPath("/");//将当前目录名给Cookie /day10
    //把cookie信息写回到客户端
    response.addCookie(ck);

detalhes do bolinho

Uma informação identifica unicamente um biscoito, compreendendo, pelo menos, uma informação de nome de identificação (nome), e o valor regulado (valor).
Um site WEB pode dar um navegador da Web envia múltiplos Cookie, um navegador da Web também pode armazenar vários sites WEB Biscoito fornece.
Navegadores geralmente só permite o armazenamento de 300 biscoito, biscoito armazenar até 20 por local, o tamanho de cada biscoito é limitado a 4KB.
Se você criar um cookie, e envia-o para o navegador, por padrão, ele é um cookie de sessão de nível (ou seja, armazenados na memória no browser), é excluído após o usuário sai do navegador. Se você deseja que o cookie do navegador armazenado no disco, você precisa usar maxAge, e dá um tempo em unidades de segundos. Banco de resolução www.gendan5.com/decision/gbp.html taxa de juros Inglaterra serão a maior parte do tempo é definido para 0 comando do navegador para excluir o cookie.
Note que quando você excluir o cookie, caminho deve ser consistente, caso contrário ele não será excluído
com base em um login simples Biscoito que (lembre-se o nome de usuário)
LoginServlet.java

classe pública LoginServlet estende HttpServlet {
public void doGet (HttpServletRequest pedido, HttpServletResponse resposta)
lança ServletException, IOException {
response.setContentType ( "text / html; charset = UTF-8");
PrintWriter out = response.getWriter ();
UserName string = "";
Cordas verificado = "";
//得到客户端保存的biscoito数据
biscoito [] = biscoitos request.getCookies ();
for (int i = 0; biscoitos = null && i <cookies.length;! i ++) {
if ( "username" .equals (biscoitos [i] .getName ())) {
username = biscoitos [i] .getValue () ;
checked = "checked = 'checada'";
}
}

    out.write("<form action='"+request.getContextPath()+"/servlet/doLogin' method='post'>");
    out.write("用户名:<input type='text' name='userName' value='"+userName+"'/><br/>");
    out.write("密码:<input type='password' name='pwd'/><br/>");
    out.write("<input type='checkbox' name='remember' "+checked+" />记住用户名<br/>");
    out.write("<input type='submit' value='登录'/><br/>");
    out.write("</form>");

}

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    doGet(request, response);
}

}

DoLogin.java

classe pública DoLogin estende HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    //获取表单数据
    String userName = request.getParameter("userName");
    String pwd = request.getParameter("pwd");
    String remember = request.getParameter("remember");
    Cookie ck = new Cookie("userName", userName);
    ck.setPath("/");
    //处理业务逻辑
    //分发转向
    if("lwb".equals(userName)){
        if("123".equals(pwd)){
            if(remember!=null){
                ck.setMaxAge(Integer.MAX_VALUE);
            }else{
                ck.setMaxAge(0);
            }
            response.addCookie(ck);
            out.write("登陆成功!");
            response.setHeader("refresh", "2;url="+request.getContextPath()+"/servlet/login");
        }else{
            out.write("密码不正确!");
            response.setHeader("refresh", "2;url="+request.getContextPath()+"/servlet/login");
        }
    }else{
        out.write("没有此用户");
        response.setHeader("refresh", "2;url="+request.getContextPath()+"/servlet/login");
    }

}

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doGet(request, response);
}

Acho que você gosta

Origin blog.51cto.com/14513127/2477331
Recomendado
Clasificación