Como permitir que subdomínios leiam os Cookies do domínio principal em ASP

Criei o And After para dominar o mundo e me tornar um milionário da internet, para isso conto com a ajuda dos donos do mundo (Bia, Chris e recentemente o Cristian). 

As idéias foram crescendo, Um dos projetos está sendo desenvolvido em um subdomínio, mas por padrões de segurança um cookie só pode ser lido pelo domínio que o criou, então os cookies ficam inacessíveis para os subdomínios.

Cookies

Se você não sabe NADA sobre cookies recomendo as leituras:

Como criar e ler cookies em ASP

Classe para gravar e ler cookies – por javascript

 

Para permitir que todos os subdomínios consigam ler o cookie precisamos apenas adiconar a propriedade domain na hora de criar o cookie.

 Por exemplo, tenho um cookie chamado odesenvolvedor que foi criado pelo domínio andafter.org e quero permitir que o subdomínio testes.andafter.org consiga ler este cookie, quando eu gerar o cookie adiciono a seguinte linha:

 

Response.Cookies("odesenvolvedor").domain = "andafter.org"

 

Neste cado o atributo domain permite que todos os subdomínios de andafter.org tenham acesso ao domínio.

Todo poderosoTodo poderoso

"That”s the way the cookie crumbles"*

"E é assim que o biscoito é repartido"*

 

Simples e fácil, agora posso dominar o mundo utilizando diversos subdomínios!

Espero que isso tenha ajudado, sugestões, dúvidas e críticas nos comentários 🙂

 


 

Para quem não lembra no filme Todo Poderoso, esta é a "assinatura" do âncora que se torna deus, interpretado por Jim Carrey. Via Wikiquote

Adicionando propriedades a objetos no Javascript em tempo de execução

Uma capacidade muito explorada no javascript é a possibilidade de se adicionar propriedades a objetos em tempo de execução. Como javascript é uma linguagem interpretada, o desenvolvedor tem a possibilidade de adicionar propriedades (variáveis, funções, etc…) a objetos já instanciados.
Para isso, é usado o objeto prototype que todos objetos do javascript possuem.
Abaixo segue uma função que facilita a escrita; ao invés de criar para cada função a ser adicionada no objeto uma entrada diferente, com ela só é necessário passar como parâmetro o objeto e uma lista de propriedades.

/* função recebe dois parâmetros: o objeto e a lista de métodos que serão adicionados a ele */
    function addMethods(myObject, methods) {
       //percorre a lista de métodos
       for (var property in methods) {
           //adiciona o método ao objeto, dinamicamente
           myObject.prototype[property] = methods[property];
      }
}

Para facilitar, segue um código completo onde no onload da página adiciono ao objeto String (nativo do javascript) duas funções e uma variável:

<html>
<head>
    <title>Adicionar metodos</title>
    <script type="text/javascript">
    /* função recebe dois parâmetros: o objeto e a lista de métodos que serão adicionados a ele */
    function addMethods(myObject, methods) {
        //percorre a lista de métodos
        for (var property in methods) {
            //adiciona o método ao objeto, dinamicamente
            myObject.prototype[property] = methods[property];
        }
    }
    window.onload = function() {
        addMethods(String, {
            func1: function() {alert("Sou a funcao 1");},
            func2: function() {alert("Sou a funcao 2");},
            const1: 2
        });
        var myString = new String();
        myString.func1();
        alert(myString.const1);
    }
    </script>
   
</head>
<body>
  
</body>
</html>

Enviando e-mail em ASP (CDO) utilizando o Google Apps

Desde que migrei para o novo servidor que estou gerenciando optei por fornecer os benefícios do Google Apps para todos os meus clientes, principalmente pela poderosa ferramente de e-mail (Gmail) que de longe é o melhor sistema de webmail que eu já testei.

Como resolvi utilizar este como único servidor de e-mails, tive que fazer alterações nos scripts de envio de e-mail, newsletter, contato, etc. dos sites dos clientes, como demorei um pouco para descobrir porque não estava funcionando acho que este pode ajudar quem está com o mesmo problema.

 

Enviando e-mail em ASP utilizando o Google Apps

Muito bem, é um script simples mas que me tomou algum tempo pois eu havia esquecido de habilitar o SSL. Não esqueça de usar um e-mail do seu domínio como remetente, criar a conta de e-mail (cerifique logando no webmail) e habilitar o uso de SMTP pelo painel do Google Apps.

Feito isso, é só utilizar o código abaixo alterando apenas as configurações para sua conta.

 

Dim objCDOSYSMail
Dim objCDOSYSCon
Set objCDOSYSMail = Server.CreateObject("CDO.Message")
Set objCDOSYSCon = Server.CreateObject ("CDO.Configuration")
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
"Aqui estava o meu problema: SSL tem que ser TRUE!
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
"o e-mail completo que você utiliza no google apps (não esqueça de habilitar SMTP no painel fo Google apps!
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "[email protected]"
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "senha"
objCDOSYSCon.Fields("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
objCDOSYSCon.Fields.update
Set objCDOSYSMail.Configuration = objCDOSYSCon
objCDOSYSMail.From = "Newsletter And After
objCDOSYSMail.To = "Nome <[email protected]>"
objCDOSYSMail.Subject = "And After - Newsletter Junho"
objCDOSYSMail.HtmlBody = email
objCDOSYSMail.Send
Set objCDOSYSMail = Nothing
Set objCDOSYSCon = Nothing 

 

 

 

Limite de envios

O Google libera o envio de apenas 500 e-mails por conta para evitar o uso indevido do Google Apps, por isso você pode utilizar duas ou mais contas se for necessário o envio de Newsletter assim. Por exemplo, crie as contas:

Assim você pode realizar o disparo de 2.000 mensagens a cada 24h, configurando cada grupo de usuário para ser atendido por uma conta de e-mail. 🙂

 

 

Espero que ajude, para o envio em PHP também é necessário habilitar o SSL (óbvio…) mas não vou me arriscar no código, se alguém quiser compartilhar publique-o no And After 🙂

Exibindo arquivos de um diretório em PHP

Todas as vezes em que precisei listar arquivos de um diretório – em PHP usava as funções opendir() e readdir(). Há muito tempo não precisava fazer isso, e hoje me deparei com essa necessidade.
Fui procurar a documentação e encontrei uma outra função que nunca tinha visto, a glob(). Só é necessário passar o caminho fisíco do diretório e ele retorna um array de entradas com arquivos e diretórios.

O uso é simples:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Listando arquivos</title>
</head>
<body>
<ul>
<?php
    //define o caminho do diretório
    $dir = "/Applications/MAMP/htdocs/exemplos/files/";
    //listar arquivos
    $files = glob($dir."/*") or die("Erro ao acessar " . $dir);
    //permorre a lista
    foreach($files as $file) {
        if (!is_dir($file)){
?>
    <li><a href="<?php echo $file;?>" title="<?php echo $file;?>"><?php echo $file;?></a></li>
<?php
        }
    }
?>
</ul>
</body>
</html>

Exibindo a quantidade de comentários do tipo spam no WordPress

Uma das pestes para quem gerencia blogs são os spams em comentários. Atrapalham, enchem a paciência e nos fazem perder tempo moderando-os. No meu blog pessoal (onde uso WordPress como gerenciador), resolvi fazer um contador de spams. Como?
Nos templates do WordPress o desenvolvedor tem no contexto um objeto $wpdb, que abstrai o banco de dados do mesmo. Ele tem um método, get_results(), onde você pode fazer uma query SQL. No caso, ao invés de chamar a tabela pelo nome dela, podemos usar $wpdb->comments (esse atributo retorna o nome da tabela; vale a pena fazer dessa forma, pois com isso mantemos um certo desacoplamento). A coluna na tabela que marca o status de um comment é a comment_approved; spam é o status para comentários marcados como spam.

Então, o código é:

 <?php
    global $wpdb;
   $spamComments = $wpdb->get_results("SELECT * FROM " . $wpdb->comments . " WHERE  comment_approved="spam"");
   echo sizeof($spamComments);
?>

 No caso, eu poderia ter usado o COUNT do SQL – seria mais performático, inclusive – mas retirei esse código de uma implementação que fiz onde eu precisava da lista de comentários futuramente…