Primo, fai attenzione alla sintassi che usi, che è assai a rischio di malfunzionamenti:

1) Gli indici stringa degli array è sempre meglio che siano tra virgolette:

RISCHIOSO: $_SESSION[user] MOLTO MEGLIO:$_SESSION["user"]

2) Quando vuoi usare una variabile in una stringa concatenata, sempre meglio esprimere il concatenamento:

RISCHIOSO: "SELECT user_votante FROM Voti_Canzoni WHERE id_canzone = '$id_song' "
MOLTO MEGLIO: "SELECT user_votante FROM Voti_Canzoni WHERE id_canzone = '".$id_song."' "

In secondo luogo, perchè non mettere la restrizione "username='".$_SESSION["user"]."'" direttamente nella query SQL?

"SELECT user_votante FROM Voti_Canzoni WHERE id_canzone = '".$id_song."' AND username='".$_SESSION["user"]."'"

Questo ti evita di passare in rivista una amrea di voti che non sono stati dati dal tuo utente...

Inoltre, se la query di inserimento che c'è nella seconda parte del codice la fai comunque sempre (non c'è nessun IF che eviti di farla se il voto è già presente) fai del lavoro inutile...